Embedded Programming
Hi pals?..this is the embedded programming week and its sort of a recap of last week Electronics Design where I redrew the Hello world board adding an led and a button which was a success...only this time I`m being required
to program the board to do something in as many programming languages as possible.. I took up the challenge with great zest since I was trying to catch up in electronics quite fast...
Let me start by pointing out a few key areas Prof. Neil touched upon..
various architectures i.e Harvard, von Neumann RISC, CISC microprocessor, microcontroller FPGA, CPLD ALA
Several peripherals such as: A/D ,comparator, D/A, timer/counter/PWM,USART, USB,,
programmer families we introduced:8051 PIC
MSP AVR
ARM STM32 PSoC, xCORE, Propeller
Various AVR processors were explained in detail:
ATtiny10
ATtiny45V
ATtiny44A
ATmega328P
ATmega16U2
ATxmega16E5
ATxmega16C4
Wait a minute::
Ok this are the design as designed and modified in Eagle CAD:
_________...
This is me working on the board accompanied with the final working board..
_________...
Not so fast pals.. here is the code I used in making the board work...The first pramming language I worked with was C and used AVR to generate makefile...I used an off-the shelf programmer not FabIsp..
#include
#include
#define bit_get(p,m) ((p) & (m))
#define bit_set(p,m) ((p) |= (m))
#define bit_clear(p,m) ((p) &= ~(m))
#define BIT(x) (0x01 << (x))
int main()
{
//SETUP
//Button is on PA3
//LED is PA7
bit_clear(DDRA,BIT(2)); //clear DDRA bit 7 makes PA3 (pin 6) an input to monitor my pushbutton - I don’t need pull-up resistor
bit_set(DDRB,BIT(5)); //Set DDRA bit 2 makes PA7 (pin 5) an output to control my LED
//LOOP
while (1)
{
if(bit_get(PINA,BIT(2)))//button is not
{
bit_clear(PORTB,BIT(5));//LED is off
}
else // button is pushed
{
bit_set(PORTB,BIT(5));//LED is on
}
}
Ok this is the rest of the material we covered in class:
packages :
DIP
SOT
SOIC
TSSOP
TQFP
LQFP
MLF, CSP, BGA
clocks :
RC (10%, 1% calibrated)
ceramic (0.5%)
quartz (50 ppm)
in-system development :
ISP (header, pads, clip)
bootloader
JTAG, debugWire, PDI
ICE
programmers :
ISP
AVRISP
FabISP
avrdude
JTAG, debugWIRE, PDI
Atmel-ICE
assembly language :
hex file
instruction set, opcodes
mnemonics, directives, expressions
avr-as gavrasm
C
GCC
AVR Libc
modules types math
avr-libc, binutils-avr, gcc-avr
WinAVR
CrossPack
Atmel Studio
host communication :
RS232
bit timing
VT100/ANSI/ISO/ECMA terminal
Kermit
Minicom
term.py
USB
software
hardware
FTDI
cable
libFTDI
echo hello-world
hello.ftdi.44.cad board components traces interior
programming
hello.ftdi.44.echo.c hello.ftdi.44.echo.c.make
hello.ftdi.44.echo.interrupt.c hello.ftdi.44.echo.interrupt.c.make
hello.ftdi.44.echo.asm hello.ftdi.44.echo.asm.make
IDE :
Atmel Studio
Eclipse AVR
Firefly
Scratch
Modkit
boards :
Arduino
board + C libraries + IDE + bootloader
Fabkit Fabio
hello.arduino.328P.cad board components traces
interior
Blink.pde boards.txt programming
hello.arduino.328P.blink.c hello.arduino.328P.blink.make programming
ATtiny
PSoC
Maple
Tessel
BeagleBone
PandaBoard
Rasberry Pi
Interpreters :
Python
BASIC
FORTH
AVRSH
JavaScript
debugging :
"printf"
Atmel Studio
gdb, ddd, Insight
STM32:
processor
STM32F3 data sheet
toolchain
gcc-arm-none-eabi
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
OpenOCD
http://sourceforge.net/projects/openocd/files/latest/download?source=files
QStlink2
sudo add-apt-repository ppa:mobyfab/qstlink2
stlink
git clone https://github.com/texane/stlink.git
programmer
ST-Link V2
software
ST library STMCube
board
STM32F3Discovery software
blink.zip programming
Nucleo
Well thats it for this week, I`ll keep on practicig and updating however till next time..cheers.