Mikrocontroller
Mikrocontroller (Beispiel: ATMEL ATmega8) PDIP (RESET) PC 8 PC (ADC/SCL) (RXD) PD0 7 PC (ADC/SDA) (TXD) PD (INT0) PD PC (ADC) PC (ADC) (INT) PD (XCK/T0) PD PC (ADC) PC0 (ADC0) VCC 7 GND GND 8 AREF (XTAL/TOSC) PB 9 0 AVCC (XTAL/TOSC) PB7 0 9 PB (SCK) (T) PD 8 PB (MISO) (AIN0) PD (AIN) PD7 7 PB (MOSI/OC) PB (SS/OCB) (ICP) PB0 PB (OCA) Ein-Chip-Computer mit konfigurierbaren Anschlüsse: Analag-/Digitalkonverter (ADC) Digitale (TTL) Ein- und Ausgabe Komparatoreingang Serielle Kommunikation (RS, TWI/I C, SPI) Harald Merkel, E-Praktikum 0 /??
Experimentierplatine renzkarte myavr Board MK/MK/light mit ATmega8 / reference sheet myavr board MK/MK/light with ATmega8 / erimentierplattform: myavr Board MK LPT Version. / myavr Board MK USB Version. / myavr Board light Version.0 µtaster/schalter (digital) µ buttons/switch (digital) Potentiometer (analog) potentiometer (analog) Lichtsensor light sensor Eingabegeräte Input devices Anschluss über USB oder LPT / COM PC-Schnittstelle PC-interface RISC µcontroller Schallwandler (Frequenzen) electric buzzer (frequenzies) LED s (digital/analog) Erweiterungsbuchse Add-On socket Ausgabegeräte output devices egister MEM Name Bit7 Bit Bit Bit Bit Bit Bit Bit0 0xF SREG I T H S V N Z C 0xE SPH SP0 SP9 SP8 0xD SPL SP7 SP SP SP SP SP SP SP0 0xC Reserved 0xB GICR INT INT0 IVSEL IVCE 0xA GIFR INTF INTF0 0x9 TIMSK OCIE TOIE TICIE OCIEA OCIEB TOIE TOIE0 0x8 TIFR OCF TOV ICF OCFA OCFB TOV TOV0 0x7 SPMCR SPMIE RWWSB RWWSRE BLBSET PGWRT PGERS SPMEN 0x TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN TWIE 0x MCUCR SE SM SM SM0 ISC ISC0 ISC0 ISC00 0x MCUCSR WDRF BORF EXTRF PORF 0x TCCR0 CS0 CS0 CS00 0x TCNT0 Timer/Counter0 (8 Bits) 0x OSCCAL Oscillator Calibration Register 0x0 SFIOR ACME PUD PSR PSR0 0xF TCCRA COMA COMA0 COMB COMB0 FOCA FOCB WGM WGM0 0xE TCCRB ICNC ICES WGM WGM CS CS CS0 0xD TCNTH Timer/Counter Counter Register High byte 0xC TCNTL Timer/Counter Counter Register Low byte 0xB OCRAH Timer/Counter Output Compare Register A High byte 0xA OCRAL Timer/Counter Output Compare Register A Low byte 0x9 OCRBH Timer/Counter Output Compare Register B High byte 0x8 OCRBL Timer/Counter Output Compare Register B Low byte Speicheraufbau / memory structure FLASH SRAM Interrupt - Vektoren 8K Program Flash ( K x ) Byte EEPROM Vector No. Program Adress 0x0000 Register R0 I/O Register 0 Byte SRAM Interruptvektoren / interrupt vectors 0x0000 0x00F 0x000 0x00F 0x000 0x0F Harald Source Merkel, E-Praktikum Interrupt 0 Definition /??
Harald Merkel, E-Praktikum 0 /?? Schaltplan 7µF/V 00nF 7µF 00nF pf pf 00nF 00nF 00nF MEGA8-P 780 0µH,K,K,K,K 0K 0K Speaker STROMSTECKER PHOTO B D AGND AREF AVCC 0 GND 8 PB0(ICP) PB(OCA) PB(SS/OCB) PB(MOSI/OC) 7 PB(MISO) 8 PB(SCK) 9 PB(XTAL/TOSC) 9 PB7(XTAL/TOSC) 0 PC0(ADC0) PC(ADC) PC(ADC) PC(ADC) PC(ADC/SDA) 7 PC(ADC/SCL) 8 PC(/RESET) PD0(RXD) PD(TXD) PD(INT0) PD(INT) PD(XCK/T0) PD(T) PD(AIN0) PD7(AIN) VCC 7 GND IN OUT LED LED LED LED POT POT Q S S SG 0 0 0 0 0 0 07 08 09 0 7 8 9 0 7 8 9 0 7 8 9 0 + + myavr Board MK V.0 www.myavr.de
Grundgerüst #define F_CPU 800 // Taktfrequenz des myavr-boards #include <avr\io.h> // AVR Register und Konstantendefinitionen main () { do { } while (true); } Startpunkt des Programmes: main Übliche Ablaufstruktur: Initialisieren, dann Endlosschleife Alle nötigen Declarationen in avr\io.h Kommentare mit //, bitte reichlich benutzen Harald Merkel, E-Praktikum 0 /??
Kontrollstrukturen while-schleife: do { } while (bedingung); for-schleife (Beispiel zählt von 0 bis 9): for (short i=0; i<0; i++) { }; Bedingungen: if (bedingung) { }; Warten: waitms(000); Harald Merkel, E-Praktikum 0 /??
Bitmanipulation in C/C++ Bit-Operatoren: & Bitweises UND Bitweises ODER Negation ˆ Bitweises XOR << Bitschieben (Shift) Kombinierte Zuweisung: &= Bitweises UND = Bitweises ODER Setzen des Bits mit der Nummer n in der Variable DDRB: DDRB = ( << n); Löschen des Bits mit der Nummer n: DDRB &= ( << n); Warten, bis Bit n in PINC gesetzt ist: while (PINC & ( << n)) { }; Warten, bis Bit n in PINC NICHT gesetzt ist: while (!(PINC & ( << n))) { }; Lauflicht: for(short n=0;n<;n++) { PORTB = <<n; waitms(000); } Harald Merkel, E-Praktikum 0 7/??
Kurzes Beispiel: Blinklicht #define F_CPU 800 #include <avr\io.h> main () { DDRB = << PB0; do { PORTB = << PB0; waitms(000); PORTB = 0; waitms(000); } while (true); } Harald Merkel, E-Praktikum 0 8/??
Ports: siehe Referenzkarte und Dokumentation I/O Register I/O MEM Name Bit7 Bit Bit Bit Bit Bit Bit Bit0 0xF 0xF SREG I T H S V N Z C 0xE 0xE SPH SP0 SP9 SP8 0xD 0xD SPL SP7 SP SP SP SP SP SP SP0 0xC 0xC Reserved 0xB 0xB GICR INT INT0 IVSEL IVCE 0xA 0xA GIFR INTF INTF0 0x9 0x9 TIMSK OCIE TOIE TICIE OCIEA OCIEB TOIE TOIE0 0x8 0x8 TIFR OCF TOV ICF OCFA OCFB TOV TOV0 0x7 0x7 SPMCR SPMIE RWWSB RWWSRE BLBSET PGWRT PGERS SPMEN 0x 0x TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN TWIE 0x 0x MCUCR SE SM SM SM0 ISC ISC0 ISC0 ISC00 0x 0x MCUCSR WDRF BORF EXTRF PORF 0x 0x TCCR0 CS0 CS0 CS00 0x 0x TCNT0 Timer/Counter0 (8 Bits) 0x 0x OSCCAL Oscillator Calibration Register 0x0 0x0 SFIOR ACME PUD PSR PSR0 0xF 0xF TCCRA COMA COMA0 COMB COMB0 FOCA FOCB WGM WGM0 0xE 0xE TCCRB ICNC ICES WGM WGM CS CS CS0 0xD 0xD TCNTH Timer/Counter Counter Register High byte 0xC 0xC TCNTL Timer/Counter Counter Register Low byte 0xB 0xB OCRAH Timer/Counter Output Compare Register A High byte 0xA 0xA OCRAL Timer/Counter Output Compare Register A Low byte 0x9 0x9 OCRBH Timer/Counter Output Compare Register B High byte 0x8 0x8 OCRBL Timer/Counter Output Compare Register B Low byte 0x7 0x7 ICRH Timer/Counter Input Capture Register High byte 0x 0x ICRL Timer/Counter Input Capture Register Low byte 0x 0x TCCR FOC WGM0 COM COM0 WGM CS CS CS0 0x 0x TCNT Timer/Counter (8 Bits) 0x 0x OCR Timer/Counter Output Compare Register 0x 0x ASSR - AS TCNUB OCRUB TCRUB 0x 0x WDTCR WDCE WDE WDP WDP WDP0 0x0 () 0x0 () UBRRH URSEL UBRR[:8] UCSRC URSEL UMSEL UPM UPM0 USBS UCSZ UCSZ0 UCPOL 0xF 0xF EEARH EEAR8 0xE 0xE EEARL EEAR7 EEAR EEAR EEAR EEAR EEAR EEAR EEAR0 0xD 0xD EEDR EEPROM Data Register 0xC 0xC EECR EERIE EEMWE EEWE EERE 0xB 0xB Reserved 0xA 0xA Reserved 0x9 0x9 Reserved 0x8 0x8 PORTB PORTB7 PORTB PORTB PORTB PORTB PORTB PORTB PORTB0 0x7 0x7 DDRB DDB7 DDB DDB DDB DDB DDB DDB DDB0 0x 0x PINB PINB7 PINB PINB PINB PINB PINB PINB PINB0 0x 0x PORTC PORTC PORTC PORTC PORTC PORTC PORTC PORTC0 0x 0x DDRC DDC DDC DDC DDC DDC DDC DDC0 0x 0x PINC PINC PINC PINC PINC PINC PINC PINC0 0x 0x PORTD PORTD7 PORTD PORTD PORTD PORTD PORTD PORTD PORTD0 0x 0x DDRD DDD7 DDD DDD DDD DDD DDD DDD DDD0 0x0 0x0 PIND PIND7 PIND PIND PIND PIND PIND PIND PIND0 0x0F 0xF SPDR SPI Data Register Speichera FLASH Interrupt - Vektoren 8K Program Flash ( K x ) Byte EEPROM Interruptvekto Vector No. Program Adress 0x000 0x00 0x00 0x00 0x00 0x00 7 0x00 8 0x007 9 0x008 0 0x009 0x00A 0x00B 0x00C 0x00D 0x00E 0x00F 7 0x00 8 0x0 9 0x0 Arbeitsreg Regist Harald Merkel, E-Praktikum 0 9/?? R0