Re: CC2 und ATmega8 per I2C verbinden Kategorie: I²C-Bus (von Tom - 30.12.2003 15:38) | |
Als Antwort auf CC2 und ATmega8 per I2C verbinden von Johannes - 30.12.2003 14:52
| |
Hallo Johannes, zum ATmega8-Modul kann ich Dir leider nichts sagen, aber beim C2-Code ist mir aufgefallen das Du auf Adresse 81 schreibst. Bei den "normalen" PCF Bausteinen ist es so , das man auf die gerade Adresse schreibt und von der ungeraden Adresse liest. Vieleicht ist hier ein Ansatzpunkt. Ausserdem könntest Du mal den Rückgabewert von i2c.start auswerten, da die Funktion das ACK Bit auswertet und den Erfolg der Adressierung zurückgibt. So kannst Du schon mal rausfinden, ob überhaupt eine Verbindung aufgebaut wird. mfg Tom > Moin, > ich habe ein Problem mit der Vernetzung von der CC2 mit einem ATmega8-Modul per I2C. Leider habe > ich noch niemanden gefunden, der mit dabei helfen konnte. > > Ich habe an ein ATmega8-Modul zwei LEDs angeschlossen, die ich von der CC2 per I2C ein und > ausschalten will. > > Der Quellcode für die CC2: > > > thread main > { > i2c.init(); > loop { > i2c.start(81); > i2c.write(1); > i2c.write(0); > i2c.stop(); > sleep (1000); > i2c.start(81); > i2c.write(1); > i2c.write(1); > i2c.stop(); > sleep (1000); > } > } > > > Und für das ATmega8-Modul: > > > 'program Test1; > > { $BOOTRST $00C00} {Reset Jump to $00C00} > { $NOSHADOW } > { $W+ Warnings} {Warnings off} > > Device = mega8, VCC = 5; > > Import SysTick, TWIslave; > > From System Import; > > Define > ProcClock = 16000000; {Hertz} > SysTick = 10; {msec} > StackSize = $0064, iData; > FrameSize = $0064, iData; > TWImode = Transparent; {HandShake or Transparen} > TWIbuffer = 10, iData; {buffer/packet size} > TWIaddr = $40; {slave address} > > > Implementation > > {$IDATA} > > {--------------------------------------------------------------} > { Type Declarations } > > type > > > {--------------------------------------------------------------} > { Const Declarations } > > > {--------------------------------------------------------------} > { Var Declarations } > {$IDATA} > var > LED1[@PortD, 4] : bit; > LED2[@PortD, 5] : bit; > > {--------------------------------------------------------------} > { functions } > > procedure InitPorts; > begin > DDRD:= %00110000; > LED1:= 1; > LED2:= 0; > end InitPorts; > > > {--------------------------------------------------------------} > { Main Program } > {$IDATA} > > begin > InitPorts; > > TWIsetGC (false); > TWIsetslaveAddr ($40); > EnableInts; > loop > LED1 := TWIRXBUFFER[0]; > TWIRXBUFFER[0] := 0; > endloop; > end Test1. > > > Leider funktioniert der Code nicht. Die LED bleibt an. > Vielleicht findet sich ja hier jemand, der mir helfen kann. > > Gru� > Johannes | |
Antwort schreiben Antworten: |