- Akku Tests und Balkonkraftwerk Speicher         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 34

Thema: Fragen zu TWI

  1. #21
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.05.2004
    Ort
    Bergstraße
    Beiträge
    245
    Anzeige

    Praxistest und DIY Projekte
    besten dank von mir und allen, die es auch interessiert.
    mal sehen. ob ich es heute noch ausprobieren kann.
    ciao .... bernd

  2. #22
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.05.2004
    Ort
    Bergstraße
    Beiträge
    245
    jupp, funktioniert!
    Kleiner Schönheitsfehler: mit
    > if ((TWSR & 0xF != 0x0 USART_transmit_string("1");
    wird natürlich überprüft, dass ein Fehler aufgetreten ist, ncith dass es ok ist.

    Allerdings hab ich bei den Basteleien wahrscheinlich einen Mega8 geschrotet. In dem Zusammenhang ist mir was aufegfallen: Ich hab ein RN-Control (Master) und ein RN-Mega8 (Slave) mit I2C verbunden. Beide haben eine eigene Stromversorgung (gemeinsame Masse). Das RN-Control ist mangels Schalter permanent an.
    Wenn das I2C-Kabel nicht da ist, oder der Slave kein Programm hat, läuft das Masterprogramm durch mit Fehlermeldungen kein Slave-Adress-Ack und kein Slave-Data-Ack. Soweit, so erwartet.
    Wenn der Mega8 läuft und das Programm ok ist, läuft das Masterprogramm ohne Fehler durch und der Mega8 erhält die Daten (das Datum). Soweit, so gut.
    Wenn jetzt aber der Mega8 aus ist (kein Strom) und der Master startet, bleibt das Masterprogramm hängen. Ich vermute bei der Abfrage, ob TWI-START gesendet wurde, muss ich aber noch näher einkreisen.

    Das bringt mich zu der Frage wie eigentlich das Verhalten des I2C-Busses definiert ist, wenn ein Gerät stromlos ist. Oder ob das, wie ich vermute, verboten ist.
    Und was machen eigentlich die Ports wenn ein Mega stromlos ist? Low?, High geht nicht, Tri-state?, undefiniert? Falls niederohmig low, kann der Master evtl. keinen Clock erzeugen, weil die Leitung low bleibt. Würde dann die I2C-Logik hängenbleiben? Und kann das den Master oder Slave beschädigen? (was erklären würde warum ich einen M8 gekillt habe)

    ciao ... Bernd

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    wieso wird da überprüft, ob ein Fehler aufgetreten ist? 0x08 im Statusregister steht doch einfach dafür, dass START übertragen wurde, oder täusch ich mich da?

    ich tippe darauf, dass die hochohmig sind, wenn der ATMEGA keinen Strom hat, wissen tu ichs aber nicht

    zu der Frage, wie der I²C-Bus beeinflusst wird, wenn ein Gerät keinen Strom hat... ich denke, sofern meine Annahme von eben stimmt, dass das doch eigentlich nichts ausmachen dürfte?

    inwiefern ist der M8 eigentlich defekt, macht er gar nichts mehr, oder nur wenig? wieso sollte er kaputt gehen, wenn er keinen Strom hat und an den TWI-Pins die Pegel wechseln?

    zu der Frage sollte sich aber noch jemand mit mehr Erfahrung äußern, denn viel Ahnung davon hab ich auch wieder nicht...

  4. #24
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.05.2004
    Ort
    Bergstraße
    Beiträge
    245
    Zitat Zitat von Pascal
    wieso wird da überprüft, ob ein Fehler aufgetreten ist? 0x08 im Statusregister steht doch einfach dafür, dass START übertragen wurde, oder täusch ich mich da?
    Das stimmt schon, aber mit "!=" wird halt geprüft ob 0x08 _nicht_ im Statusregister steht, also _kein_ START übertragen wurde.

    Zitat Zitat von Pascal
    inwiefern ist der M8 eigentlich defekt, macht er gar nichts mehr, oder nur wenig?
    Er reagiert nicht mehr auf Programmieranfragen ("missing or wrong device" in Pony). Ein Ersatzprozessor ging aber. Ich probiere es heute abend nochmal aus, vielleicht hat er es sich ja überlegt

    Zitat Zitat von Pascal
    wieso sollte er kaputt gehen, wenn er keinen Strom hat und an den TWI-Pins die Pegel wechseln?
    Tja, das weis ich halt nicht. Ich fand es nur komisch, dass a) der Prozzi nicht mehr ging und b) der Master hängt, wenn der Slave keinen Strom
    hat.
    Anyway, der Code hat keine Schuld

    ciao ... bernd

  5. #25
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    klingt logisch...
    mir ist auch gerade aufgefallen, dass das ein Unterschied zwischen dem geposteten Mastercode und meinem verwendeten ist; hatte ich nicht genau geschaut
    man muss halt die Debuginfos nur richtig interpretieren... (aber ich hab das damals falsch kommentiert)
    die If-Abfrage war eigentlich dazu gedacht, irgendeine errorhandling-Routine aufzurufen...hab die dann aber zum debuggen verwendet

    hast du vielleicht was an den Fusebits geändert? aber gehen sollte er dann eigentlich trotzdem noch...

  6. #26
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.05.2004
    Ort
    Bergstraße
    Beiträge
    245
    Zitat Zitat von Pascal
    hast du vielleicht was an den Fusebits geändert? aber gehen sollte er dann eigentlich trotzdem noch...
    naja, ob er noch geht, weis ich nicht, weil das Programm, das ich gerade drin hatte fehlerhaft war und nix tut ...

    ciao .. bernd

  7. #27
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    ist natürlich dumm...

    aber zu dem Problem, dass der Master hängt, wenn der Slave keinen Strom hat...ich hab grad mal wieder ein wenig experimentiert und wenn ich dem Master die falsche Slaveaddresse(also eine nicht vorhandene) gebe, hängt der Master
    das war bei dir dann genauso
    ich probier mal, den Code soweit zu überarbeiten, dass der nicht mehr hängen bleibt

  8. #28
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    ich hab jetzt den Code ein wenig erweitert...jetzt bleibt der Master nicht mehr hängen, wenn er eine nicht vorhandene Addresse versucht anzusprechen:

    es muss noch eine unsigned char Variable namens errcounter deklariert werden

    Code:
    	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    	while(!(TWCR & (1<<TWINT))) {
    			errcounter++; 
    			if(errcounter==10){errcounter=0; break;}
    			}
    	TWDR = addr; //addr = Zieladdresse
    	TWCR = (1<<TWINT) | (1<<TWEN);
    	while(!(TWCR & (1<<TWINT))) {
    			errcounter++; 
    			if(errcounter==10){errcounter=0; break;}
    			}
    
    	TWDR = data;		
    	TWCR = (1<<TWINT) | (1<<TWEN);
    	while(!(TWCR & (1<<TWINT))) { 
    			errcounter++; 
    			if(errcounter==10){errcounter=0; break;}
    			
    	TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
    die If-Abfragen kann man sich bei Bedarf ja selbst reinschreiben

  9. #29
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.05.2004
    Ort
    Bergstraße
    Beiträge
    245
    jupp, so geht es. Die TWI Logik selber hat wohl kein Timeout, oder?
    Ich hab übrigens mal im Datenblatt nachgesehen. Für TWI ist vorgeschrieben, dass alle devices powered sind. Es sollte aber trotzdem eigentlich nix passieren, weil die Leitungen über die pull-up Widerstände hochgelegt werden und die Ports die Leitungen entweder auf 0 ziehen, oder tri-state sind, also zu keinem Zeitpunkt selber Strom abgeben. ...
    Ist mir ein Rätsel...
    ciao .. bernd

  10. #30
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.05.2004
    Ort
    Bergstraße
    Beiträge
    245
    Inzwishen weis ich warum mein alter Code nicht ging.
    Ich hab die Slaveaddresse definiert:
    uint8_t SlvAdd = 0xFD;
    und später das WriteBit dazugeodert:
    TWDR = SlvAdd | _BV(TW_WRITE);
    Aus mir noch immer unbekannten Gründen kommt da was Falsches raus, es geht mit:
    TWDR = SlvAdd + _BV(TW_WRITE);
    Ist eigentlich identisch ... oder ?
    ciao .. bernd

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests