Lötkurs der VDE-Hochschulgruppe
Transcrição
Lötkurs der VDE-Hochschulgruppe
Do IT yourself – Bau Deine eigene Hardware Handbuch zum Lötkurs IT Summerschool 2008 http://www.ziti.uni-heidelberg.de/ Hardware Revision 1.2 Christian Kreidl Christophe Thil History: 12. Mai 2006 Hardware Revision 1.0 01. Juni 2007 Hardware Revision 1.1 01. Juli 2008 Hardware Revision 1.2 Inhaltsverzeichnis Inhaltsverzeichnis i 1 Mikrocontroller-Platine 1.1 Technische Daten . . . . . . . 1.1.1 Port B . . . . . . . . . 1.1.2 Port C . . . . . . . . . 1.1.3 Port D . . . . . . . . . 1.2 Schaltplan und Platinenlayout . 1.3 Jumper und Pinbelegungen . . 1.4 Spannungsversorgung . . . . . 1.5 Changelog . . . . . . . . . . . 2 Software 2.1 Allgemein . . . 2.2 Portzugriff . . . 2.3 vde-hsg-lib . . 2.4 Beispielsoftware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Programmieradapter 3.1 Schaltplan und Platinenlayout . . . . . 3.2 Funktionsweise . . . . . . . . . . . . 3.3 Changelog . . . . . . . . . . . . . . . 3.4 AVRDUDE . . . . . . . . . . . . . . 3.4.1 Setzen der Fusebits . . . . . . 3.4.2 Schreiben des Flash-Speichers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 . . . 12 . . . 13 . . . 14 . . . 14 . . . . . . 17 17 17 20 20 21 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 3 3 3 4 9 9 11 . . . . . . Abbildungsverzeichnis 23 Tabellenverzeichnis 23 Listings 23 Literatur 24 i 1 Spannungsversorgung 9 − 16V Stromverbrauch typ. 40mA Größe 100mm x 60mm Tabelle 1: Technische Daten der µC-Platine 1 Mikrocontroller-Platine Bei dem für das Projekt eingesetzten Mikrocontroller handelt sich um einen 8-Bit AVR-Mikrocontroller der Firma Atmel. Dabei wurde nicht die „low power“ Ausführung mit einer Versorgungsspannung von 3,3 Volt gewählt, sondern die 5 Volt Variante. Somit wird eine 5 Volt Spannungsversorgung für die Platine benötigt. Ein Linearregler erzeugt diese Spannung von einer extern angelegten Stromversorgung. Die angelegte Spannung kann in einem Bereich von 9 bis 16 Volt liegen. Es muss nicht auf die Polarität des Hohlsteckers des externen Transformators geachtet werden, da eine Brückenschaltung dies korrigiert und die Platine damit vor Verpolung geschützt ist. Gegen Überspannung wurde keine Sicherheitsvorkehrung getroffen. Ein Standardmaß für die Platinenfertigung ist eine Europakarte (100mm x 160mm). Günstige Anbieter für die Erstellung von eigenen Platinen sind PCBPOOL oder MULTPCB. Dabei ist eine doppelseitige, durchkontaktierte und mit Lötstoplack versehene Platine der Standard und kann je nach Bedarf gegen Aufpreis erweitert werden. Eine Europakarte mit Standardleistungen kostet bei PCBPOOL 49 EUR und bei MULTIPCB 41 EUR. Es werden Gerber Dateien von diversen Layoutprogrammen angenommen - man ist also nicht an ein spezielles Entwicklungswerkzeug gebunden. 1.1 Technische Daten In Tabelle 1 sind die technischen Daten der Mikrocontroller-Platine aufgeführt. Da kein Überspannungsschutz auf der Platine enthalten ist, ist die maximale Versorgungsspannung von 16 Volt unbedingt einzuhalten. Mit dem im Kursmaterial enthaltenen Netzteil ist die Platine diesbezüglich nicht zu beschädigen, da hier die maximale Ausgangsspannung bei 12 Volt liegt. Der Mikrocontroller hat 28-Pins die neben der Spannungsversorgung drei Ports zugeordnet sind (PB0-PB7, PC0-PC6,PD0-PD7). Diesen Pins können aufgrund 1.1 Technische Daten 2 der internen Struktur des Mikrocontrollers spezielle Schnittstellen zugeordnet werden. Eine genaue Darstellung kann dem Blockschaltbild des Datenblattes [ATm8] entnommen werden. Pin Bezeichnung Funktion Bauteil 1 PC6 Reset PB und ISP 2 PD0 RXD RS232 3 PD1 TXD RS232 4 PD2 LED LED1 5 PD3 LED LED2 6 PD4 LED LED3 7 VCC Core Spannung 5V 8 GND Core Masse GND 9 PB6 LED LED4 10 PB7 Taster PB1 11 PD5 Taster PB2 12 PD6 NC 13 PD7 NC 14 PB0 NC 15 PB1 NC 16 PB2 SPI (SS) ISP 17 PB3 SPI (MOSI) ISP 18 PB4 SPI (MISO) ISP 19 PB5 SPI (SCK) ISP 20 AVCC ADC Spannung 5V 21 AREF ADC GND 22 AGND ADC GND 23 PC0 ADC Poti1 24 PC1 ADC Poti2 25 PC2 ADC Temp. Sensor 26 PC3 NC 27 PC4 NC 28 PC5 NC Tabelle 2: Pinlayout des Mikrocontrollers 1.1 1.1.1 Technische Daten 3 Port B An diesem Port stellt die Mikrocontroller-Architektur eine SPI Schnittstelle zur Verfügung. Dabei handelt es sich um serielle Übertragung die für Sende- und Empfangsrichtung (PB3 und PB4) getrennte Leitungen vorsieht. Es ist eine synchrone Datenübertragung, weshalb eine CLK Leitung (PB5) existiert. Bei dem von Motorola eingeführten Protokoll existiert ein quasi Standard, der die Datenleitungen als Bus vorsieht. Aus diesem Grund existiert auch ein Chip Select das mit Pin PB2 verbunden wird um den Baustein zu aktivieren. Über diese Schnittstelle erfolgt das Programmieren des Mikrocontrollers. 1.1.2 Port C Pin 7 von Port C (PC7) ist der Reset Pin und deshalb reserviert. An diesen Port können auch analoge Quellen angeschlossen werden. Bei der Platine sind zwei analoge Eingangspins für Potentiometer und ein analoger Eingangspin für den Temperatursensor verwendet. Für die analoge Schnittstelle gibt es extra Stromversorgungspins. Durch die Schaltvorgänge bei digitalen Signalen werden Störungen auf analoge Signale übertragen, weshalb man für den Analogteil in der Regel eine eigene Massefläche vorsieht, die wenige definierte Übergänge zur digitalen Masse hat. Aufgrund der nicht erforderlichen Genauigkeit und des einfacheren Layouts ist dies bei dieser Platine nicht erforderlich. 1.1.3 Port D Diesem Port ist den Pins PD0 und PD1 eine serielle Schnittstelle zugeordnet (USART). Mit dieser Schnittstelle lassen sich synchrone und asynchrone Verbindungen realisieren. Die serielle Schnittstelle der Platine ist an diese Pins angeschlossen und kann über ein Nullmodem Kabel an den COM-Port eines PCs angeschlossen werden. Zusätzlich sind drei der vier LEDs an PD2, PD3 und PD4 angeschlossen. An PD5 ist der Pushbutton 2 angeschlossen und bei geschlossenem Schalter wird der Pin nach Masse gezogen (active low). Die Tabelle 3 zeigt die Bestückungsliste mit Bauteiltyp, Bauform und Anzahl. 1.2 Schaltplan und Platinenlayout 4 Bauteil Typ Bauform Anzahl Linearregler 78L05 SMD SO-8 1 Mikrocontroller Atmel ATmega 8 DIP-28 1 RS232 Transciever MAX232ECWE SMD SO-16 wide 1 Dioden 1N4148 DO-35 4 Leuchtdioden 2mA 5mm 4 Widerstand 1, 5kΩ SMD 1206 oder 1210 6 Widerstand 100kΩ SMD 1206 oder 1210 2 Trimmer 10kΩ 6mm, 2,5mm Raster 2 Temperatursensor NTC 10kΩ 5% 2,5mm Raster 1 Kondensator (Keramik) 100nF SMD 1206 oder 1210 6 Kondensator (Tantal) 1µF SMD 1206 oder 1210 4 Kondensator (Elektrolyt) 10µF 2,5mm Raster 2 Wannenstecker 10-polig Wannenstecker gerade 1 Stiftleiste 32 Stifte einreihig gerade 1 Taster 5mm liegend 3 Hohlstecker 2,1mm Lötfahnen 1 Jumper 2,5mm 9 Tabelle 3: Bestückungsliste der µC-Platine 1.2 Schaltplan und Platinenlayout Das Platinenlayout wurde mit dem CAD Programm EAGLE angefertigt. Die Software gibt es in einer kostenlosen Version, die bei CADSOFT [Eagle] herunter geladen werden kann. Mit dieser Version können zweilagige Layouts bis zu einer Größe einer halben Europakarte (80mm x 100mm) angefertigt werden. Diese können dann in ein GERBER Dateiformat exportiert werden, um es an die Leiterplattenfertigung zu übergeben. In diesem Dateiformat sind alle geometrischen Daten für das Layout enthalten. Wenn größere Projekte mit ganzer Europakarte oder mehreren Layern realisiert werden soll, kann man als Student eine Vollversion zum Vozugspreis von ca. 150 Euro erwerben. Dabei kann man eine Linuxlizenz neben der für Windows beantragen, was keine zusätzliche Vollversion darstellt. Es gibt neben EAGLE noch andere Programme mit denen Layouts erstellt werden können z.B. TARGET, PROTEL oder MENTOR GRAPHICS. Abbildung 1 zeigt den Schaltplan der Mikrocontroller-Platine. Abbildungen 2 bzw. 3 zeigen das Platinen-Layout für die Unter- bzw. Oberseite, Abbildungen 4 und 5 den Bestückungsdruck und Abbildungen 6 und 7 die dazugehörige Anordnung der Bauteile. 1.2 Schaltplan und Platinenlayout Abbildung 1: Schaltplan der µC-Platine 5 1.2 Schaltplan und Platinenlayout Abbildung 2: Bottom-Layout der µC-Platine 6 Abbildung 3: Top-Layout der µC-Platine 1.2 Schaltplan und Platinenlayout Abbildung 4: Bestückungsdruck Platine Bottomder µC- 7 Abbildung 5: Bestückungsdruck der Platine TopµC- 1.2 Schaltplan und Platinenlayout Abbildung 6: BottomDokumentation der µC-Platine 8 Abbildung 7: TopDokumentation der µC-Platine 1.3 Jumper und Pinbelegungen 9 Pin Name Beschreibung Richtung 1 MOSI Master out, Slave in PC->µC 2 Vcc 5V Platine->ISP 3 N/C not connected 4 GND Masse 5 /Reset Reset Signal, activ low PC->µC 6 GND Masse 7 SCK Clock PC->µC 8 GND Masse 9 MISO Master in, Slave out PC<-µC 10 GND Masse Tabelle 4: ISP-Stecker der µC-Platine 1.3 Jumper und Pinbelegungen In Abbildungen 8 und 9 sind die Belegungen der Anschluss- und Jumperleisten zu sehen. Sie dienen dazu, die Taster, LEDs, Potis und den NTC mit dem Mikrocontroller zu verbinden. Durch die Jumper können nicht benutzte Features der Platine vom Mikrocontroller getrennt und die Pins anderweitig eingesetzt werden. Die Pinbelegung des ISP1 -Programmiersteckers CON3 ist in Abbildung 10 zu sehen. Tabelle 4 erklärt die Pins. 1.4 Spannungsversorgung Um eine 5 Volt Spannungsversorgung für den Mikrocontroller zu erzeugen, kommt ein SMD Linearregler von Texas Instruments zu Einsatz. Es gibt baugleiche und pinkompatible Typen von National Semiconductors oder anderen Herstellern, die ohne eine Änderung am Layout ebenfalls verwendet werden können. Der maximale Ausgangsstrom ist bei den diversen Herstellern des Typs 78L05 gleich und liegt bei 100mA. Die Stromversorgung mit Hilfe eines externen Transformators erfolgt über eine Hohlsteckerbuchse. Bei Hohlsteckern gibt ein Zeichen mit einem geöffnetem Kreis und einem Punkt in der Mitte die Polarität des Steckers an. Da nicht bei allen Netzteilen die Hohlstecker ausgetauscht werden können, wurde eine GraetzGleichrichterschaltung auf der Platine vorgesehen. Es muss nun nicht mehr auf 1 In System Programming POTI2 POTI1 PC1(ADC1) PC0(ADC0) GND NTC PC2(ADC2) PC3(ADC3) PC4(ADC4/SDA) PC5(ADC5/SCL) Vcc PD4 LED3 PB2 PB1 Abbildung 8: Pinleiste 1 und 2 der µC-Platine Abbildung 9: Pinleiste 3 und 4 der µC-Platine Vcc PB1 PB2 PB0 PD7 PD6 PD5 PB7 PB6 PD3(INT1) LED2 LED4 PD2(INT0) LED1 GND 1.4 Spannungsversorgung 10 GND GND GND GND N/C /Reset SCK MISO 11 Vcc Changelog MOSI 1.5 2 1 Abbildung 10: ISP-Stecker der µC-Platine die Polarität geachtet werden. Hierbei kommen vier Dioden zum Einsatz, wodurch ein zusätzlicher Spannungsabfall entsteht. Je nach Polarität unterscheiden sich die zwei Dioden, durch die der Strom zum Linearregler geleitet wird. Der Linearregler hat einen Eingangsspannungsbereich von 7 bis 20 Volt. Um den durch die Dioden verursachten Spannungsabfall (2 x Schwellenspannung) zu kompensieren, sollte an der Hohlsteckerbuchse mindestens 9 Volt angelegt werden. Um den Linearregler nicht im Grenzbereich zu betreiben sollte keine höhere Spannung als 16 Volt angelegt werden. Da bei der Spannungswandlung bei höherer Eingangsspannung mehr Wärme erzeugt und er auf der Unterseite der Leiterplatte angebracht ist, kann unter Umständen die Wärme nicht gut genug abgeführt werden. 1.5 Changelog Version Datum Änderung 1.0 1.1 12.05.2006 01.06.2007 1.2 01.07.2008 Erste Version industrielle Platinenherstellung: Bestückungsdruck und Vias optimiert; Pins Vin1 und Vin2 hinzugefügt; Platinenfläche vergrößert um Klebefüße zu montieren. Bestückungsdruck geändert; Vias ohne Thermals und mit Stopplack abgedeckt. 12 2 Software Der Mikrocontroller wird in ANSI C programmiert. Als Compiler wird gcc eingesetzt, der auf die avrlib zurückgreift. Beide sind für Windows und Linux verfügbar. Unter Windows steht mit WinAVR[WinAVR] ein komplettes Programmpaket zur Verfügung, das Editor, Kompiler und Bibliotheken enthält. Für Linux müssen die Programme und Bibliotheken einzeln installiert werden (für ein HowTo siehe [RobNetz]). 2.1 Allgemein Sämtliche Definitionen sind in den Headerdateien nachzulesen. So werden z.B. in iom8.h die Variablen für den Portzugriff definiert (siehe Listing 1). Ebenso sind für die Bits der verschiedensten Registern Namen definiert, um ein einfacheres Programmieren zu ermöglichen (siehe Listing 2). 1 3 /* Port #define #define #define D */ PIND DDRD PORTD _SFR_IO8(0x10) _SFR_IO8(0x11) _SFR_IO8(0x12) /* Port #define #define #define C */ PINC DDRC PORTC _SFR_IO8(0x13) _SFR_IO8(0x14) _SFR_IO8(0x15) /* Port #define #define #define B */ PINB DDRB PORTB _SFR_IO8(0x16) _SFR_IO8(0x17) _SFR_IO8(0x18) 5 7 9 11 13 Listing 1: Portdefinitionen 2 4 6 8 /* PORTB */ #define PB7 #define PB6 #define PB5 #define PB4 #define PB3 #define PB2 #define PB1 #define PB0 7 6 5 4 3 2 1 0 Listing 2: Bitdefinitionen 2.2 Portzugriff 13 Zum Setzen und Löschen von Bits in einem Byte sollten mit den neuen Versionen der AVR-Bibliothek die logischen Verknüpfungen UND, ODER und NICHT zusammen mit dem Makro _BV(bit) verwendet werden. _BV(bit) setzt an der angegebenen Stelle ein Bit durch die shift-Operation 1 « bit. Um in einem gegebenen Byte ein Bit zu setzen und alle anderen unangetastet zu lassen, wird die Operation byte&= ˜_BV(bit) verwendet und um es zu löschen byte|= _BV(bit). In sfr_defs.h sind weitere Makros definiert, die von iom8.h verwendet werden. Dort sind auch Makros enthalten, um auf gesetzte Bits zu prüfen (bit_is_clear(sfr, bit), bit_is_set(sfr, bit)) oder um zu warten, bis ein Bit gesetzt wurde (loop_until_bit_is_clear(sfr, bit), loop_until_bit_is_set(sfr, bit)). 2.2 Portzugriff Die I/O-Pins sind zu Ports mit je 8 Bit zusammengefasst. Für jeden Port existiert eine Variable zum Schreiben und eine zum Lesen des Ports. Für Port D wäre dies PORTD. Die Input- / Output-Einstellungen der Bits eines Ports werden durch das Data Direction Register, z.B. DDRD, vorgenommen. Ein gesetztes Bit bedeutet, dass der Pin als Output arbeitet. Ist ein Pin als Input definiert, kann durch das Schreiben einer 1 in das entsprechende Bit des PORT-Register der interne Pullup-Widerstand aktiviert werden. Ein Eingang kann durch das Input-Register abgefragt werden, z.B. PIND. Beispiele sind in Listing 3 zu sehen. 1 //Pin für Pushbutton als Input setzen DDRD&= ~_BV(PD5); //PB2 3 5 7 //Pin für LED als Output setzen DDRD|= _BV(PD2); //LED1 //PullUp Widerstand für PB2 aktivieren PORTD|= _BV(PD5); 9 11 13 //PB2-Eingang abfragen if ((PIND & _BV(PD5)) == 0) { printf("Button 2 pressed."); } //LED1 einschalten PORTD|= _BV(PD2); Listing 3: Beispiele zu Registern 2.3 2.3 vde-hsg-lib 14 vde-hsg-lib Listing 4 zeigt die, in der von uns bereitgestellten Bibliothek, verfügbaren Methoden. 27 /* * Universität Heidelberg * Institut für Technische Informatik * http://www.ziti.uni-heidelberg.de * Beispielprogramm * Atmel ATmega 8 mit 8MHz */ #include <avr/io.h> 29 typedef enum {FALSE = 0, TRUE = 1} BOOL; 31 // Vref=5V setzen, ansonsten 2.56V //#define ADC_REF 5V 21 23 25 33 35 37 39 41 43 45 47 49 //offset um den Fehler des ADC zu korrigieren. #define ADCoffset 8 #define ADC_INPUT_NTC 2 #define ADC_INPUT_POTI1 0 #define ADC_INPUT_POTI2 1 void setupPorts(void); BOOL isPressedPB1(void); BOOL isPressedPB2(void); void led1(BOOL on); void led2(BOOL on); void led3(BOOL on); void led4(BOOL on); uint16_t readADCChannel(uint8_t mux); float getTemp(void); Listing 4: vde-hsg-lib.h 2.4 Beispielsoftware Ein Beispielprogramm, das die oben erwähnte Bibliotheken verwendet, ist in Listing 5 zu sehen. Es misst die Temperatur und gibt sie auf der seriellen Schnittstelle aus. 2.4 22 24 26 Beispielsoftware 15 /* * Universität Heidelberg * Institut für Technische Informatik * http://www.ziti.uni-heidelberg.de * Beispielprogramm * Atmel ATmega 8 mit 8MHz */ 28 30 #ifdef HAVE_CONFIG_H #include <config.h> #endif 32 34 #include <avr/io.h> #include <inttypes.h> #include <stdio.h> 36 38 #include "uart.h" #include "vde-hsg-lib.h" 40 #include <util/delay.h> 42 void delay_ms(uint16_t ms) { while (ms) { _delay_ms(1); ms--; } } 44 46 48 50 52 54 56 int main(void) { // Initialisieren setupPorts(); // Serielle Schnittstelle initialisieren uartInit(); static FILE stdout_uart = FDEV_SETUP_STREAM(uartSendByte, NULL, _FDEV_SETUP_WRITE); stdout = &stdout_uart; 58 60 62 // Variablen fuer Knightrider Effekte :-) uint8_t knightrider = 1; int8_t direction = 1; uint16_t ADCresult; float V,R,T; 64 while (1) { // Endlosschleife 66 if ( !isPressedPB1() & isPressedPB2() ) { ←- 2.4 Beispielsoftware led1(FALSE); 68 16 led2(FALSE); led3(FALSE); led4(FALSE); } 70 72 74 76 78 80 82 84 // Knight Rider Lauflicht :-) if ( isPressedPB1() & !isPressedPB2() ) { switch (knightrider) { case 1: { led1(TRUE); led2(FALSE); led3(FALSE); led4(FALSE); direction = 1; break;} case 2: { led1(FALSE); led2(TRUE); led3(FALSE); led4(FALSE); break;} case 3: { led1(FALSE); led2(FALSE); led3(TRUE); led4(FALSE); break;} case 4: { led1(FALSE); led2(FALSE); led3(FALSE); led4(TRUE); direction = -1; break;} } knightrider+=direction; printf("Knight Rider!\n\r"); delay_ms(150); } else { knightrider = 1; direction = 1; } ←←←←- 86 88 // Temperatur anzeigen if ( !isPressedPB1() & !isPressedPB2() ) { 92 // LEDs blinken lassen led1(TRUE); led2(FALSE); led3(TRUE); led4(FALSE); delay_ms(250); 94 led1(FALSE); led2(TRUE); led3(FALSE); led4(TRUE); 96 //Temperatur messen T = getTemp(); 90 98 100 102 104 106 108 110 112 // zusaetzliche Infos ausgeben ADCresult = readADCChannel(ADC_INPUT_NTC); #ifdef ADC_REF5V // folgende Berechnungen mit Vref=5 V = ADCresult*0.0048828125; //(5/1024); R = ADCresult*122.0703125; //(2.56/1024/4e-5) #else // folgende Berechnungen mit Vref=2.56 V = ADCresult*0.0025; //(2.56/1024); R = ADCresult*62.5; //(2.56/1024/4e-5) #endif printf("ADC=%d U=%4.3fV R=%6.3f Ohm T=%3.1f C\n\r", ←- 17 ADCresult, (double) V, (double) R, (double) T); 114 116 delay_ms(250); } } // while } // main Listing 5: beispiel.c 3 Programmieradapter Der Programmieradapter wird benötigt, um AVR-Mikrocontroller zu programmieren. Dieser braucht zum Programmieren nicht ausgebaut werden, weshalb man auch von einem In-System-Programming (ISP) spricht. Dieser Adapter benutzt die USB-Schnittstelle; im Internet sind weitere Adapter zu finden, die die serielle Schnittstelle oder der Parallelport verwenden. 3.1 Schaltplan und Platinenlayout Abbildung 11 zeigt den Schaltplan des Programmieradapters. Abbildungen 12 bzw. 13 zeigen das Platinen-Layout für die Unter- bzw. Oberseite, Abbildungen 14 und 15 die dazugehörige Anordnung der Bauteile. In Tabelle 6 sind die verwendeten Bauteile aufgeführt. 3.2 Funktionsweise Der Adapter wird an der USB-Schnittstelle betrieben und bezieht daraus auch seine Versorgungsspannung von 5 Volt. Durch Setzen des Jumpers Dev Power kann über das ISP-Kabel ein weiterer Mikrocontroller mit Strom versorgt werden. Es ist jedoch darauf zu achten dass diese Quelle nicht gegen einen Kurzschluss geschützt ist, sowie dass der USB-Port in der verwendeten Konfiguration maximal 100mA bereit stellt. Über den Jumper Slow SCK kann die Programmierfrequenz verändert werden. Ein gesetzter Jumper bewirkt die Reduktion von 375kHz auf 8kHz. Dies ist notwendig um neue Mikrocontroller, deren interne Taktgenerierung noch nicht auf 8MHz erhöht ist, zu beschreiben. Der dritte Jumper Update ist zum Aktualisieren der Firmware des Programmieradapters zu setzen. 3.2 Funktionsweise Bauteil Typ Zenerdioden 3,6V Leuchtdioden 2mA Quarz 12 MHz Grundton Widerstand 68Ω Widerstand 1, 5kΩ Widerstand 200Ω Widerstand 100kΩ Spule 10µH Kondensator (Elektrolyt) 10µF Kondensator (Keramik) 100nF Kondensator (Keramik) 22pF Mikrocontroller Atmel ATmega 8 Pfostenbuchse 10polig (2x5) Buchse USB-Typ B 18 Bauform Anzahl SOT-23 2 5mm 2 HC49/S 1 SMD 1206 oder 1210 2 SMD 1206 oder 1210 3 SMD 1206 oder 1210 1 SMD 1206 oder 1210 1 Axial SMCC 12 1 2,5mm Raster 1 SMD 1206 oder 1210 1 SMD 1206 oder 1210 2 DIP-28 1 für Flachbandkabel 1 gewinkelt, print 1 Tabelle 6: Bestückungsliste der ISP-Platine Abbildung 11: Schaltplan der ISP-Platine 3.2 Funktionsweise 19 Abbildung 12: Bottom-Layout der ISP-Platine Abbildung 13: Top-Layout der ISP-Platine Abbildung 14: Bottom-Overlay der ISP-Platine Abbildung 15: Top-Overlay der ISP-Platine 3.4 AVRDUDE 20 Auf der USBasp-Homepage [USBasp] sind weitere Varianten des Programmieradapters, Dokumentationsmaterial sowie die Quellen der verwendeten Firmware zu finden. Um den AVR-Mikrocontroller in den Programmiermodus zu schalten, wird das Resetsignal ausgelöst. Dadurch werden bestimmte Pins des Mikrocontrollers in den zur Programmierung nötigen Modus geschaltet. Über diese Pins wird das Programm seriell in den Chip geschrieben. Ist der Vorgang abgeschlossen, dann wird das Resetsignal aufgehoben und die Programmierpins werden in ihren normalen Modus zurückgeschaltet, in dem sie dem Programm als I/O-Pins zur Verfügung stehen. Beim erstmaligen Einstecken des Programmieradapters ist unter Windows die Installation eines Gerätetreibers erforderlich. Dieser befindet sich im USBasp-Paket im Unterverzeichnis „bin/win-driver“. Unter Linux und Mac OS X ist dies nicht erforderlich. 3.3 Changelog Version Datum Änderung 1.0 1.1 12.05.2006 01.07.2008 Erste Version Bestückungsdruck geändert; Vias ohne Thermals und mit Stopplack abgedeckt. 3.4 AVRDUDE Die Programmiersoftware AVRDUDE [AVRDUDE] ist u. A. für Windows, Linux und Mac OS X erhältlich und ermöglicht die Programmierung verschiedenster Mikrocontroller. AVRDUDE kann entweder als vorkompiliertes Paket für Windows [AVRDBIN] herunter geladen und installiert oder selbst aus dem Quelltext übersetzt werden. Die Software unterstützt den verwendeten USBasp-Programmieradapter seit Version 5.2. Gestartet wird das Programm über den Aufruf von avrdude in der Kommandozeile. Da die Software rein konsolenbasierend ist muss beim Aufruf eine Mindestanzahl von Parametern übergeben werden: 3.4 AVRDUDE 21 CKSEL3..0 Frequenz 0001 1 MHz 0010 2 MHz 0011 4 MHz 0100 8 MHz CKOPT 1 (unprogrammed) Tabelle 8: Einstellungen für internen Oszillator • -p: Der zu programmierende Controllertyp, für die Platine dementsprechend m8 (ATmega 8) • -c: Der Typ der verwendeten Programmierhardware, hier usbasp • -U: Speicheroperation. Das Ziel wird durch das zweite Schlüsselwort hfuse, lfuse, flash oder eeprom definiert. Als drittes kann, durch ein Doppelpunkt getrennt, mit w geschrieben oder r gelesen werden. 3.4.1 Setzen der Fusebits Über die Fusebits können bestimmte Parameter des Mikrocontrollers dauerhaft eingestellt werden, sodass diese auch nach einem Reset und dem Entfernen der Betriebsspannung konfiguriert sind. Zur Berechnung des hexadezimalen Äquivalents der Fusebits ist der AVR Fuse Calculator[AVRFC] sehr hilfreich. Die Einstellung der Fusebits wird als programmed und unprogrammed bezeichnet. Programmed bedeutet, dass das Häkchen gesetzt sein muss, das entsprechende Bit ist allerdings 0! Unprogrammed bedeutet analog Häkchen nicht gesetzt und Bit=1! Abbildung 16 zeigt die Einstellungen wie wir sie verwenden. Bis auf die Einstellungen der CKSEL- (siehe Tabelle 8) und WTDON-Bits sind alles Standardwerte, wie sie im Datenblatt [ATm8] des ATmega8 aufgeführt sind. Der Takt sollte auf 8MHz eingestellt werden, da die Beispielprogramme dies vorraussetzen. Das Setzen der Fusebits erfogt durch den Aufruf von AVRDUDE mit dem Parameter -U hfuse:w und -U lfuse:w, um die oberen und unteren Fusebits zu setzen. Das gesamte Kommando lautet dementsprechend avrdude -p m8 -c usbasp -U hfuse:w:0xD9:m -U lfuse:w:0xE4:m. 3.4 AVRDUDE 22 Abbildung 16: Einstellung der Fusebits für ATmega8 bei 8MHz 3.4.2 Schreiben des Flash-Speichers Der Programmcode des Mikrocontrollers kann mittels AVRDUDE in den internen Flash-Speicher übertragen werden. Sofern das dem Sourcecode beiliegende Makefile benutzt wird kann dies über den Aufruf des Befehls make program erfolgen, oder auch durch manuelles Starten von AVRDUDE. Analog zum Setzen der Fusebits ist das Schreiben des Flash-Speichers auch eine Speicheroperation, sodass AVRDUDE mit dem Parameter -U flash:w aufgerufen wird. Jedoch muss nun zusätzlich der Dateiname der zu übermittelnden Hex-Datei angegeben werden. So lautet das gesamte Kommando für das Beispielprogramm avrdude -p m8 -c usbasp -U flash:w:vde-bsp.hex. Abbildungsverzeichnis 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Schaltplan der µC-Platine . . . . . . . . . . . . Bottom-Layout der µC-Platine . . . . . . . . . Top-Layout der µC-Platine . . . . . . . . . . . Bottom-Bestückungsdruck der µC-Platine . . . Top-Bestückungsdruck der µC-Platine . . . . . Bottom-Dokumentation der µC-Platine . . . . Top-Dokumentation der µC-Platine . . . . . . Pinleiste 1 und 2 der µC-Platine . . . . . . . . Pinleiste 3 und 4 der µC-Platine . . . . . . . . ISP-Stecker der µC-Platine . . . . . . . . . . . Schaltplan der ISP-Platine . . . . . . . . . . . Bottom-Layout der ISP-Platine . . . . . . . . . Top-Layout der ISP-Platine . . . . . . . . . . . Bottom-Overlay der ISP-Platine . . . . . . . . Top-Overlay der ISP-Platine . . . . . . . . . . Einstellung der Fusebits für ATmega8 bei 8MHz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 6 7 7 8 8 10 10 11 18 19 19 19 19 22 Tabellenverzeichnis 1 2 3 4 6 8 Technische Daten der µC-Platine . . Pinlayout des Mikrocontrollers . . . Bestückungsliste der µC-Platine . . ISP-Stecker der µC-Platine . . . . . Bestückungsliste der ISP-Platine . . Einstellungen für internen Oszillator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . 2 . 4 . 9 . 18 . 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Listings 1 2 3 4 5 Portdefinitionen . . . . Bitdefinitionen . . . . Beispiele zu Registern vde-hsg-lib.h . . . . . beispiel.c . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . 12 12 13 14 15 LITERATUR 24 Literatur [USBasp] USBasp-Homepage: Programmierhardware, URL: http://www.fischl.de/usbasp/ [AVRDUDE] AVRDUDE-Homepage: Programmiersoftware, URL: http://savannah.nongnu.org/projects/avrdude/ [AVRDBIN] Kompilierte Windows-Version von AVRDUDE 5.3.1: Programmiersoftware, URL: http://www.ensigma.com.au/avrdude-5.3.1-win32-usb. zip [AVRFC] AVR Fuse Calculator Berechnung der Fusebits, URL: http://palmavr.sourceforge.net/cgi-bin/fc.cgi [ATm8] Atmel Corporation: ATmega8(L) Complete Datasheet, URL: http://www.atmel.com/dyn/resources/prod_documents/ doc2486.pdf [WinAVR] WinAVR-Homepage: AVR-GCC for Windows, URL: http://winavr.sourceforge.net/ [RobNetz] Roboternetz.de: Avr-gcc und avrdude installieren, URL: http://www.roboternetz.de/wissen/index.php/Avr-gcc_ und_avrdude_installieren [Eagle] CadSoft-Homepage: EAGLE Layout Editor, URL: http://www.cadsoft.de/