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

Beispielprojekt: display

Originalboard:
AVR-Ctrl
Mit diesem Beispiel soll ein Teil der LCD API vorgestellt werden. Das alphanumerische LCD wird über einen 4 Bit Datenkanal an den vorkonfigurierten LCD Port zusammen mit den Steuersignalen angeschlossen (siehe Bild). Ein Portanschluß bleibt dabei unbenutzt.

display.png

Schaltplan des angeschlossenen LCD

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 oder --enable-board=avrctrl-8535-8mhz-small erreicht werden:

In unserem Beispiel benutzen wir dei small Boardkonfiguration, um kleineren Code zu erhalten. Es ist also AVRHAL_LIB_LCD_COM=LCD_DELAY vorkonfiguriert.

Verwendung der Bibliothek

Der Quellcode

main.c
Zunächst werden alle notwendigen Headerdateien der AVR HAL Bibliothek eingebunden:
    #include <avrhal/delay.h>
    #include <avrhal/lcd.h>
Danach werden notwendige globale Definitionen und Deklarationen vorgenommen, wobei für den Überlauf des AVR Zählers ein Signalhändler aktiviert wird:
    uint16_t cnt = 0;
    SIGNAL(SIG_OVERFLOW0)
    {
            cnt++;
    }
In der Mainroutine wird vor Eintritt in die Endlosschleife der AVR Zähler entsprechend unseren Bedürfnissen eingerichtet, das LCD Port initialisiert und die Meldung "--= AVR-Ctrl =--" in der ersten Zeile des LCD ausgegeben. Der LCD API wird bei der Initialisierung die Größe des LCD von 16 Zeichen in 2 Zeilen übergeben:
    int main(void)
    {
            outp(BV(CS02)|BV(CS00), TCCR0); // tmr0 @ 7,8125 kHz
            timer_enable_int(BV(TOIE0));
            sei();
            lcd_init((2 /* rows */ << 6) + 16 /* columns */);
            lcd_putstr("--= AVR-Ctrl =--");
            lcd_putstr("Counter = ");
            lcd_control(1, 0, 0);                   // cursor block off
Nach der erfolgreichen Basisinitialisierung wird in der Endlosschleife kontinuierlich der Zählerstand eines 16 Bit Wertes ausgegeben, welcher immer bei Überlauf des AVR Zählers inkrementiert wird:
            while (1)
            {
                    lcd_gotoxy(10,1);
                    lcd_print5(cnt);
            }
    } /* main() */
Der vollständige Quellcode kann der AVR HAL Bibliothek unter doc/examples/display 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=display.map,--cref -mmcu=at90s8535 \
                     -o display.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 display.out display.out-rom.bin
[avr@host] > avr-objcopy -O ihex -R .eeprom display.out display.out-rom.hex
[avr@host] > avr-objcopy -O srec -R .eeprom display.out display.out-rom.s19
    
Zum Beispiel Motorolas S-Record:
S0120000646973706C61792D726F6D2E73313971
S113000010C02AC029C028C027C026C025C024C0CB
S113001023C023C021C020C01FC01EC01DC01CC0DF
S11300201BC011241FBECFE5D2E0DEBFCDBF10E060
S1130030A0E6B0E0E0ECF3E003C0C89531960D9281
S1130040A038B107D1F710E0A0E8B0E001C01D92DC
S1130050A638B107E1F718C0D3CF1F920F920FB69D
S11300600F9211248F939F9380918000909181002F
S1130070019690938100809380009F918F910F90BF
S11300800FBE0F901F901895CFE5D2E0DEBFCDBF15
S113009085E083BF81E089BF789480E936D080E62B
S11300A090E0C6D081E790E0C3D084E094D061E0D2
S11300B08AE0A7D08091800090918100C8D0F7CFCA
S11300C0282F85B38870922F907F892B85BBAA9A9D
S11300D0AA9885B388702295207F822B85BBAA9A23
S11300E0AA980895282F95B39870807F8160982BE3
S11300F095BBAA9AAA9885B388702295207F21601F
S1130100822B85BBAA9AAA980895982F8F738093FF
S1130110820080937E00805C80937F00892F82958B
S113012086958695837011F0833021F483E0809363
S1130130840005C0991F9927991F9093840084B364
S1130140876F84BB80E29EE4E7D085B388708063C8
S113015085BBAA9AAA9888E893E1DED085B3887013
S1130160806385BBAA9AAA988EE690E0D5D085B321
S11301708870806385BBAA9AAA9882E390E0CCD069
S113018085B38870806285BBAA9AAA9882E390E0BE
S1130190C3D085B38870806285BBAA9AAA9885B3B8
S11301A08870806885BBAA9AAA9882E390E0B4D04C
S11301B085B3887085BBAA9AAA9885B3887080662F
S11301C085BBAA9AAA9882E390E0A6D0B0D02AD0A0
S11301D087E001D00895992782FF02C02CE001C076
S11301E028E081FF02C02A6001C0286080FF02C0AD
S11301F0296001C02860822F63DF82E390E08CD005
S11302000895282F962F8091840098239093850039
S1130210ECE7F0E0E90FF11D209383008081820F69
S11302208CD0089582E04CDF80ED97E075D008957E
S1130230CF93DF93D92FC82F8881882329F0899100
S113024082D088818823D9F7DF91CF910895CF9206
S1130250DF92EF92FF920F931F93E82EF92E50E155
S1130260C52E57E2D52E7D2D6C2D94D0062F172F39
S1130270862F805D68D0912F802F7D2D6C2D78D0B6
S1130280E81AF90A48EEC42E43E0D42E9F2D8E2D91
S11302907D2D6C2D7FD0062F172F862F805D53D098
S11302A0912F802F7D2D6C2D63D0E81AF90A34E646
S11302B0C32ED12C9F2D8E2D7D2D6C2D6BD0062F12
S11302C0172F862F805D3FD0912F802F7D2D6C2D91
S11302D04FD0E81AF90A9F2D8E2D6AE070E05AD0AB
S11302E0062F172F862F805D2ED0912F802F23E08D
S11302F0880F991F2A95E1F7800F911F800F911F96
S1130300E81AF90A8E2D805D1ED01F910F91FF907F
S1130310EF90DF90CF900895E82FF92F309631F0C9
S113032000000000000000003197D1F7089581E03B
S1130330C7DE80ED97E0F0DF08958068C1DE80EDD0
S113034097E0EADF0895CEDE82E390E0E5DF809176
S113035083008F5F8093830090918200891731F42A
S1130360809185008F5F682F80E04BDF08950895AA
S11303705527002480FF02C0060E571F660F771F03
S11303806115710521F096958795009799F7952F3A
S1130390802D0895AA1BBB1B51E107C0AA1FBB1FD8
S11303A0A617B70710F0A61BB70B881F991F5A95FD
S11303B0A9F780959095682F792F8A2F9B2F089500
S11303C02D2D3D204156522D4374726C203D2D2D10
S11303D000436F756E746572203D2000004000007C
S9030000FC

Optionale Informationen:
[avr@host] > avr-objdump -x display.out > display.inf
[avr@host] > avr-size -d display.out > display.siz
[avr@host] > avr-size -x display.out >> display.siz
    
Zum Beispiel Sekmentgrößen:
   text        data     bss     dec     hex filename
    960      32       6     998     3e6 display.out

   text    data     bss     dec     hex filename
  0x3c0    0x20     0x6     998     3e6 display.out


Automatically generated by Doxygen 1.2.18 on 17 Jul 2003.