Hauptseite   Module   Alphabetische Liste   Datenstrukturen   Datenstruktur-Elemente   Zusätzliche Informationen  

Beispielprojekt: keys

Originalboard:
AVR-Ctrl
Dieses Beispiel soll die Benutzung der KEY API aufzeigen. Am vorkonfigurierten KEY Port sind dazu 5 Tasten direkt angeschlossen. (siehe Bild). Die Eingänge dieses Ports sind im Ruhezustand über R2 auf 0 kurzgeschlossen. Bei einer gedrückten Taste wird der zugehörige Eingang auf 1 gezogen. Drei der 8 Bits am KEY Port werden nicht von der KEY API interpretiert. Sie stehen der Anwendung frei zur Verfügung. Auf dem Herkunftsboard AVR-Ctrl könnten dort analoge Signale angeschlossen werden.

keys.png

Schaltplan angeschlossener Tasten

Nicht im Schaltplan enthalten ist der in diesem Beispiel benutzte Anschluß des LCD als Anzeige. Hierzu wird auf das Beispielprojekt: display verwiesen.

Konfiguration der Bibliothek

Die Bibliothek muß intern mit den folgenden Parametern übersetzt werden. Dies kann durch Benutzung der originalen Boardkonfiguration über --enable-board=avrctrl-8535-8mhz-small erreicht werden:

Verwendung der Bibliothek

Der Quellcode

main.c
Zunächst werden alle notwendigen Headerdateien der AVR HAL Bibliothek eingebunden:
    #include <avrhal/delay.h>
    #include <avrhal/key.h>
    #include <avrhal/lcd.h>
Eine globale Definition oder Deklaration ist bei diesem Beispiel nicht notwendig. In der Mainroutine wird vor Eintritt in die Endlosschleife das KEY und das LCD Port initialisiert:
    int main(void)
    {
            uint8_t scancode, scroll_pos = 0;
            uint8_t scroll[] = " press a key.. ";
            key_init();
            lcd_init((2 /* rows */ << 6) + 16 /* columns */);
            lcd_control(1, 0, 0);                   // cursor block off
Nach der erfolgreichen Basisinitialisierung wird in der Endlosschleife kontinuierlich alle 25ms der KEY Scancode ausgelesen und als dezimale und hexadezimale Zahl am LCD ausgegeben. Nebenbei wird ein Aufforderungstext zum Drücken einer Taste als Laufschrift in der obersten Zeile des LCD ausgegeben:
            while (1)
            {
                    scancode = key_scancode();
                    lcd_clear();
                    lcd_gotoxy(4,1);
                    lcd_printhex(scancode);
                    lcd_gotoxy(10,1);
                    lcd_print3(scancode);
                    lcd_gotoxy(0,0);
                    lcd_putstr(&scroll[strlen(scroll) - 1 - (scroll_pos++ >> 3)]);
                    if (scroll_pos == 8 * strlen(scroll)) scroll_pos = 0;
                    delay_us(25000);
            }
    } /* main() */
Der vollständige Quellcode kann der AVR HAL Bibliothek unter doc/examples/keys entnommen werden.

Übersetzung

C Quelle zu Objekt compilieren
[avr@host] > avr-gcc -g -O2 -Wall -Wstrict-prototypes -Wa \
                     -mmcu=at90s8535 -DAVRHAL_CONFIG_avrctrl_8535_8mhz_small \
                     -c -o main.o main.c
    
Objekt zu ELF Datei linken
[avr@host] > avr-gcc -Wl,-Map=keys.map,--cref -mmcu=at90s8535 \
                     -o keys.out main.o -lavrhal-avrctrl-8535-8mhz-small
    
ELF Datei in Binärdatei, Intel HEX und Motorola S-Record Format überführen
[avr@host] > avr-objcopy -O binary -R .eeprom keys.out keys.out-rom.bin
[avr@host] > avr-objcopy -O ihex -R .eeprom keys.out keys.out-rom.hex
[avr@host] > avr-objcopy -O srec -R .eeprom keys.out keys.out-rom.s19
    
Zum Beispiel Motorolas S-Record:
S00F00006B6579732D726F6D2E733139AE
S113000010C02AC029C028C027C026C025C024C0CB
S113001023C022C021C020C01FC01EC01DC01CC0E0
S11300201BC011241FBECFE5D2E0DEBFCDBF10E060
S1130030A0E6B0E0E2EEF3E003C0C89531960D927D
S1130040A837B107D1F710E0A8E7B0E001C01D92CE
S1130050AC37B107E1F701C0D3CFCFE4D2E0DEBFC4
S1130060CDBFEE2480E1CC2EDD2E0894C11CD11C22
S1130070BD2DAC2DE0E6F0E001900D928A95E1F7FC
S11300808AB387708ABB80E976D084E0DAD089B3FA
S1130090082F1127087F107043D061E084E0E7D077
S11300A0802F49D161E08AE0E2D0802F992705D1E1
S11300B060E0862FDCD0FD2DEC2D01900020E9F7C7
S11300C031978E2D869586958695E81BF109319793
S11300D0E3948E2F9F2FE2D08E2D9927FD2DEC2DAA
S11300E001900020E9F73197EC19FD09EE0FFF1F8D
S11300F0EE0FFF1FEE0FFF1F8E179F0721F088EAF8
S113010091E603D0C4CFEE24FACFE82FF92F30962E
S113011031F000000000000000003197D1F708958D
S113012081E004D080ED97E0F0DF0895282F85B3B7
S11301308870922F907F892B85BBAA9AAA9885B341
S113014088702295207F822B85BBAA9AAA9808954D
S1130150282F95B39870807F8160982B95BBAA9ABD
S1130160AA9885B388702295207F2160822B85BB55
S1130170AA9AAA980895982F8F73809378008093F1
S11301807200805C80937300892F82958695869592
S1130190837011F0833021F483E080937A0005C0EA
S11301A0991F9927991F90937A0084B3876F84BB12
S11301B080E29EE4AADF85B38870806385BBAA9A37
S11301C0AA9888E893E1A1DF85B38870806385BB32
S11301D0AA9AAA988EE690E098DF85B38870806327
S11301E085BBAA9AAA9882E390E08FDF85B38870D2
S11301F0806285BBAA9AAA9882E390E086DF85B3E1
S11302008870806285BBAA9AAA9885B38870806832
S113021085BBAA9AAA9882E390E077DF85B38870B9
S113022085BBAA9AAA9885B38870806685BBAA9A6A
S1130230AA9882E390E069DF73DF2AD087E001D0D7
S11302400895992782FF02C02CE001C028E081FFB5
S113025002C02A6001C0286080FF02C0296001C07A
S11302602860822F63DF82E390E04FDF0895282F18
S1130270962F80917A00982390937B00E0E7F0E03A
S1130280E90FF11D209379008081820F67D00895D2
S113029082E04CDF80ED97E038DF0895CF93DF9361
S11302A0D92FC82F8881882329F089915DD088812E
S11302B08823D9F7DF91CF9108950F931F93CF939C
S11302C0DF93D92FC82F83E0C83ED80760F58C2F61
S11302D09D2F64E670E06FD0062F172F862F805D68
S11302E043D0912F802F64E670E053D0C81BD90B04
S11302F08C2F9D2F6AE070E05ED0062F172F862F7B
S1130300805D32D0912F802F23E0880F991F2A958A
S1130310E1F7800F911F800F911FC81BD90B8C2F01
S1130320805D22D003C084E790E0B8DFDF91CF91F5
S11303301F910F910895CF93982F82958F70805DB0
S11303408A3308F0895F9F70C92FC05DCA3308F0F3
S1130350C95F0AD08C2F08D0CF9108958068E6DE5B
S113036080ED97E0D2DE0895F3DE82E390E0CDDE07
S1130370809179008F5F809379009091780089173C
S113038031F480917B008F5F682F80E070DF0895E7
S113039008955527002480FF02C0060E571F660FDC
S11303A0771F6115710521F096958795009799F748
S11303B0952F802D0895AA1BBB1B51E107C0AA1FCE
S11303C0BB1FA617B70710F0A61BB70B881F991FF2
S11303D05A95A9F780959095682F792F8A2F9B2F8E
S10503E008957A
S11303E22070726573732061206B65792E2E200054
S10B03F2004000004572720096
S9030000FC

Optionale Informationen:
[avr@host] > avr-objdump -x keys.out > keys.inf
[avr@host] > avr-size -d keys.out > keys.siz
[avr@host] > avr-size -x keys.out >> keys.siz
    
Zum Beispiel Sekmentgrößen:
   text        data     bss     dec     hex filename
    994      24       4    1022     3fe keys.out

   text    data     bss     dec     hex filename
  0x3e2    0x18     0x4    1022     3fe keys.out


Automatically generated by Doxygen 1.2.18 on 17 Jul 2003.