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

Beispielprojekt: ow

Originalboard:
AVR-Ctrl
Dieses Beispiel soll die Benutzung der One Wire OW API aufzeigen. Am vorkonfigurierten OW DQ Bit ist mindestens ein One Wire Gerät angeschlossen, in unserem Beispiel der Temperatursensor DS1820 von Dallas (siehe Bild). Wahlweise können weitere OW Geräte angeschlossen werden. Als Anzeigeeinheit wird ein LCD benutzt, das wie im Beispielprojekt: display angeschlossen und benutzt wird.

ow.png

Schaltplan angeschlossener OW Geräte

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 erreicht werden:

Wahlweise kann auch die Bibliotheksvariante avrctrl-8535-8mhz-small benutzt werden. Dabei wird aber die Anzahl der benutzbaren Geräte automatisch auf 1 beschränkt. Das muß auch bei der Beschaltung beachtet 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/lcd.h>
    #include <avrhal/ow.h>
Eine globale Definition oder Deklaration ist bei diesem Beispiel nicht notwendig. In der Mainroutine wird vor Eintritt in die Endlosschleife das LCD Port und der OW Kommunikationsstack initialisiert und vorhandene OW Geräte gesucht. Schlägt das fehl, wird eine entsprechende Fehlermeldung ausgegeben:
    int main(void)
    {
            ow_device_st devarray[2];
            unsigned char devices;
            unsigned int  waiting = 5000;
            lcd_init((2 /* rows */ << 6) + 16 /* columns */);
            lcd_putstr("--= AVR-Ctrl =--");
            lcd_control(1, 0, 0);                   // cursor block off
            if (!ow_init()) {
                    lcd_putstr("ERROR: ow_init()");
                    while (1);
            }
            devices = ow_rom_search(devarray);
Nach der erfolgreichen Basisinitialisierung wird in der Endlosschleife kontinuierlich die Anzahl und der ROM Code der gefundenen OW Geräte ausgegeben. Zwischen dem Anzeigewechsel wird immer 5 Sekunden gewartet. Über das Define __AVRHAL_LIB_SMALL wird die jeweils benutzte Variante der Bibliothek identifiziert und der Code entsprechend anders gestaltet:
            while (1)
            {
                    unsigned char dev;
                    lcd_gotoxy(0,1); lcd_cleol();
    #ifdef __AVRHAL_LIB_SMALL
                    lcd_putstr("OW_DEVICES: ");
                    lcd_print2(devices);
    #else
                    lcd_printf("OW_DEVICES: %d", devices);
    #endif
                    delay_ms(waiting);
                    for (dev = 0; dev < devices; dev++) {
                            unsigned char snidx;
    #ifdef __AVRHAL_LIB_SMALL
                            unsigned char *cp = (unsigned char *)&(devarray[dev].rom_code);
    #endif
                            lcd_gotoxy(0,1); lcd_cleol();
    #ifdef __AVRHAL_LIB_SMALL
                            for (snidx = 0; snidx < sizeof(ow_rom_code_st); snidx++) {
                                    lcd_printhex(cp[snidx]);
                            }
    #else
                            lcd_printf("%x", devarray[dev].rom_code.family);
                            for (snidx = 0; snidx < 6; snidx++) {
                                    lcd_printf("%x", devarray[dev].rom_code.serial[snidx]);
                            }
                            lcd_printf("%x", devarray[dev].rom_code.crc);
    #endif
                            delay_ms(waiting);
                    }
            }
    } /* main() */
Der vollständige Quellcode kann der AVR HAL Bibliothek unter doc/examples/ow entnommen werden.
Warnung:
Die Anzahl der angeschlossenen Geräte muß mit der Feldgröße von devarray[] übereinstimmen. In unserem Beispiel:
            ow_device_st devarray[2];

Übersetzung

C Quelle zu Objekt compilieren
[avr@host] > avr-gcc -g -O2 -Wall -Wstrict-prototypes -Wa \
                     -mmcu=at90s8535 -DAVRHAL_CONFIG_avrctrl_8535_8mhz \
                     -c -o main.o main.c
    
Objekt zu ELF Datei linken
[avr@host] > avr-gcc -Wl,-Map=ow.map,--cref -mmcu=at90s8535 \
                     -o ow.out main.o -lavrhal-avrctrl-8535-8mhz
    
ELF Datei in Binärdatei, Intel HEX und Motorola S-Record Format überführen
[avr@host] > avr-objcopy -O binary -R .eeprom ow.out ow.out-rom.bin
[avr@host] > avr-objcopy -O ihex -R .eeprom ow.out ow.out-rom.hex
[avr@host] > avr-objcopy -O srec -R .eeprom ow.out ow.out-rom.s19
    
Zum Beispiel Motorolas S-Record:
S00D00006F772D726F6D2E73313986
S113000010C02AC029C028C027C026C025C024C0CB
S113001023C022C021C020C01FC01EC01DC01CC0E0
S11300201BC011241FBECFE5D2E0DEBFCDBF10E060
S1130030A0E6B0E0E6EAF8E003C0C89531960D9278
S1130040AA3AB107D1F710E0AAEAB0E001C01D92C4
S1130050A43BB107E1F701C0D3CFCDE4D2E0DEBFCA
S1130060CDBF80E9D5D080E690E079D184E036D167
S113007021D2882321F481E790E071D1FFCF8C2F26
S11300809D2F0196CAD2982E482E552442E8242E3C
S113009040E0342E6C2E7D2E0894611C711C31E9D5
S11300A0A32E30E0B32E61E080E02ED167D05F92C2
S11300B04F923F922F92D6D288E893E153D0EE2408
S11300C00F900F900F900F90E91468F761E080E0B3
S11300D01BD154D08E2D9927082F192F000F111FD3
S11300E0000F111F000F111F080F191F060D171DF8
S11300F0F12FE02F808199279F938F93BF92AF9226
S1130100B1D2FF240F900F900F900F90C02ED12EDC
S11301100F5F1F4FF12FE02F81910E2F1F2F992773
S11301209F938F93BF92AF929DD20F900F900F9099
S11301300F90F394F5E0FF1568F7FD2DEC2D878102
S113014099279F938F93BF92AF928CD288E893E1C3
S113015009D00F900F900F900F90E394E91408F4D6
S1130160B5CFA1CFE82FF92F309639F0A0EDB7E045
S11301701197F1F7A8953197C9F70895CF93C091D6
S1130180B10080E2D6D08091B1008823D1F780916C
S1130190B3008150682F8C2FB7D0CF91089584B3CA
S11301A08870876084BBA99AA89881E090E016D3F0
S11301B0AA9A81E090E012D39F99F7CFAA9884B3CA
S11301C0876F84BB0895282F85B38870922F907F02
S11301D0892B85BBAA9AAA9885B388702295207F1B
S11301E0822B85BBAA9AAA980895282F95B3987054
S11301F0807F8160982B95BBAA9AAA9885B3887052
S11302002295207F2160822B85BBAA9AAA98089503
S1130210982F8F738093B00080939600805C8093B6
S11302209700892F829586958695837011F0833087
S113023021F483E08093B20005C0991F9927991F88
S11302409093B20084B3876F84BB80E29EE4C6D2ED
S113025085B38870806385BBAA9AAA9888E893E1DD
S1130260BDD285B38870806385BBAA9AAA988EE6AE
S113027090E0B4D285B38870806385BBAA9AAA98AB
S113028082E390E0ABD285B38870806285BBAA9A82
S1130290AA9882E390E0A2D285B38870806285BB7D
S11302A0AA9AAA9885B38870806885BBAA9AAA98E6
S11302B082E390E093D285B3887085BBAA9AAA980A
S11302C085B38870806685BBAA9AAA9882E390E079
S11302D085D28FD22AD087E001D00895CF93992771
S11302E082FF02C0CCE001C0C8E081FF02C0CA6046
S11302F001C0C86080FF02C0C96001C0C8604FDF90
S11303008C2F61DFCF910895282F962F8091B20012
S113031098239093B300E4E9F0E0E90FF11D2093F2
S1130320B1008081820F69D2089539DF82E04BDF0A
S113033008951F93182F33DF812F57DF8091B10069
S11303408F5F8093B1009091B000891731F4809150
S1130350B3008F5F682F80E0D7DF1F910895CF939C
S1130360DF93D92FC82F8881882329F08991E1DF71
S113037088818823D9F7DF91CF910895949880B329
S11303809927282F392F2071307084FD03C0932FB3
S1130390822F08958C9A80EE91E020D28C988CE381
S11303A090E01CD2849906C084EA91E017D281E0DF
S11303B090E0089584EA91E011D280E090E00895FD
S11303C008959498882341F08C9A86E090E006D2B0
S11303D08C9880E490E007C08C9A8CE390E0FED186
S11303E08C988AE090E0FAD108950895CF93DF9332
S11303F094988C9A86E090E0F1D18C9889E090E012
S1130400EDD180B39927D92FC82FC071D07084FD46
S113041006C087E390E0E2D18C2F9D2F05C087E3CF
S113042090E0DCD181E090E0DF91CF910895FF92DC
S11304300F931F93CF93DF93F82EC0E0D0E001E039
S113044010E0912F802F0C2E02C0880F991F0A9460
S1130450E2F78F21B6DFC00FD11FC830D1057CF37E
S1130460912F802FE5E0CDB7DEB70EC20F931F9317
S1130470CF93DF9380E000E010E0C82FDD27B6DFE4
S1130480882359F081E090E0002E02C0880F991F64
S11304900A94E2F78C2B9D2B02C08C2F9D2F0F5FAB
S11304A01F4F083011054CF39927DF91CF911F910D
S11304B00F91089594988C981092AC005FDF882374
S11304C019F480E090E0089581E090E008950895A3
S11304D0AF92BF92CF92DF92EF92FF920F931F934E
S11304E0CF93082F192F21E0E22ECC24AC2CFE2C24
S11304F0DC2C8091AF00882309F069C03FDF88239A
S113050049F4C092AE00C092AF00C092AD0080E04A
S113051090E06DC080EF8BDF69DFC82F67DFC130EB
S113052019F4813009F440C0C81711F09C2F18C089
S11305308091AD00E81640F4F12FE02FEA0DF11D93
S113054090819F2129F003C090E0E81609F491E01E
S1130550992331F4CE2C88E08E1510F0E092AE0091
S11305602A2D3327CE2DCF5FBF2CBB0C913039F40D
S1130570F12FE02FE20FF31F80818F2907C0F12FA5
S1130580E02FE20FF31FF09480818F218083892F65
S113059018DFEC2EFB2CBB2019F4A39491E0F92E68
S11305A0E7E0EA1508F0B8CFF0E4FE1580F468E05F
S11305B070E0912F802FEDD0882349F4C092AD00D4
S11305C0CC2019F481E08093AF0081E0D82EDD20A7
S11305D029F0F12FE02F8081882339F4DD24D09293
S11305E0AE00D092AF00D092AD008D2D9927CF915F
S11305F01F910F91FF90EF90DF90CF90BF90AF903D
S113060008951092AE001092AF001092AD0060DF1A
S1130610992708955DDF992708959093AB008093FF
S1130620AA001092AC00EDDF8823C1F08091AC00E9
S11306308F5F8093AC009927282F392F43E0220F36
S1130640331F4A95E1F7280F391F8091AA00909132
S1130650AB00820F931FDEDF882341F78091AC004B
S113066099270895A0E0B0E0E7E3F3E0EAC04FE0A3
S1130670A42EB12CAC0EBD1EFB2DEA2DC190D19041
S1130680AE2EBF2EFD2DEC2D8191CE2EDF2E853288
S113069059F0882309F47BC04CDEFD2DEC2D8191AB
S11306A0CE2EDF2E8532A9F7FD2DEC2D8191CE2E95
S11306B0DF2E282F332727FD309524363105B9F056
S11306C02536310524F42336310541F00EC0253793
S11306D0310569F02837310591F007C0FB2DEA2D6B
S11306E022E030E0A20EB31E808123DECBCF3AE0BD
S11306F0832E912C20E1E22E27E2F22E05C090E118
S1130700E92EF12C8E2C9F2CFB2DEA2D22E030E0DB
S1130710A20EB31E008111818837ECF4843639F4BB
S113072017FF05C0109501951F4F8DE202DE32E0E0
S1130730E316F10480F00E151F0568F49F2D8E2D2D
S11307406AE070E062D0E62EF72E6230710518F090
S11307500617170798F3912F802F7F2D6E2D55D0F4
S1130760F72FE62FE856FF4F8081E3DD912F802F8E
S11307707F2D6E2D4AD0082F192F9F2D8E2D792D68
S1130780682D43D0E62EF72E672B29F77BCFECE0BC
S113079074C0F92FE82F40E0615070408FEF6F3F35
S11307A07807C9F05191A8E0252F3327842F992782
S11307B08227932780FF05C088E148274695406833
S11307C001C046955695A15079F7615070408FEF5E
S11307D06F3F780739F7842F99270895E82FF92F69
S11307E0309631F000000000000000003197D1F78E
S11307F00895D5DC81E0E7DC08951F93182FCFDC42
S11308001068812FE0DC1F910895AA1BBB1B51E1E6
S113081007C0AA1FBB1FA617B70710F0A61BB70B6C
S1130820881F991F5A95A9F780959095682F792F5D
S11308308A2F9B2F08952F923F924F925F926F922F
S11308407F928F929F92AF92BF92CF92DF92EF925C
S1130850FF920F931F93CF93DF93CDB7DEB7CA1BDD
S1130860DB0B0FB6F894DEBF0FBECDBF09942A8808
S1130870398848885F846E847D848C849B84AA84B0
S1130880B984C884DF80EE80FD800C811B81AA813D
S1130890B981CE0FD11D0FB6F894DEBF0FBECDBF08
S10908A0CA2FDB2F0895AE
S11308A62D2D3D204156522D4374726C203D2D2D25
S11308B6004552524F523A206F775F696E69742829
S11308C629004F575F444556494345533A2025640A
S11308D60025780000400000303132333435363795
S10D08E638394142434445460000FE
S9030000FC

Optionale Informationen:
[avr@host] > avr-objdump -x ow.out > ow.inf
[avr@host] > avr-size -d ow.out > ow.siz
[avr@host] > avr-size -x ow.out >> ow.siz
    
Zum Beispiel Sekmentgrößen:
   text        data     bss     dec     hex filename
   2214      74      10    2298     8fa ow.out

   text    data     bss     dec     hex filename
  0x8a6    0x4a     0xa    2298     8fa ow.out


Automatically generated by Doxygen 1.2.18 on 17 Jul 2003.