- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: Statusregister (TWSR) TWI beim mega168

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2004
    Ort
    Leipzig
    Alter
    39
    Beiträge
    22

    Statusregister (TWSR) TWI beim mega168

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo


    hab nur noch ein kleines Problem. Der TWI (I²C) funktioniert gut.
    Aber nur wenn ich das TWSR nicht nach dem richtigen Statuscode
    abfrage.
    Das TWSR hat immer nach jeder Byteübertragung oder Startbedingung den
    Code 0x00. Obwohl z.B. nach der Startbedingung eigentlich 0x08 im TWSR stehen müsste.
    Könnte mir da mal jemand helfen???


    MFG
    Tobi
    Code:
    ;------------------------------------------------------
     ;	 START Condition
     ;------------------------------------------------------
     send:
    	ldi  akku,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
    	sts	 TWCR,akku
     wait1:
     	lds	 akku,TWCR
    	sbrs akku,TWINT
    	rjmp wait1
     campere2:
    	lds  akku,TWSR
    	andi akku,0x00
    	cpi	 akku,Start
    	brne Error1
     ;------------------------------------------------------
     ;	 Adresse
     ;------------------------------------------------------
     Adresse:
     	ldi	 akku,SLA_8574
    	sts     TWDR,akku			; Speichert Slave-Adresse in TWDR
    	ldi	 akku,(1<<TWINT)|(1<<TWEN)
    	sts     TWCR,akku
     wait2:
     	lds	 akku,TWCR
    	sbrs   akku,TWINT
    	rjmp  wait2
     campere1:
    	lds    akku,TWSR
    	andi  akku,0x00
    	cpi	 akku,SLA_W
    	brne   Error2
     daten:
    	mov 	 data,r18
    	sts     TWDR,data
    	ldi	 akku,0b10000100
    	sts     TWCR,akku
     wait3:
     	lds	 akku,TWCR
    	sbrs   akku,TWINT
    	rjmp   wait3
     campere3:
    	lds     akku,TWSR
    	andi   akku,0x00
    	cpi	 akku,0x00
    	brne   Error2		
     ;------------------------------------------------------
     ;	 STOP Condition
     ;------------------------------------------------------
     stop:
     	ldi	 akku,(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)
    	sts	 TWCR,akku
    	ret

    Viel Spaß
    Gruß

    Tobi

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hi,

    kann es sein das Du den Wert mit dem falschen Wert Und-verknüpfts ?

    Sollte mit 0xF8 geschehen, um die unteren 3 Bits auszublenden !

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2004
    Ort
    Leipzig
    Alter
    39
    Beiträge
    22
    Nein, an dem liegts auch nicht. Denn den Wert 0xF8 hatte ich auch schon eingegeben. Hatte auch nicht funktioniert.

    Viel Spaß
    Gruß

    Tobi

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Du machst ständig "TWSR und 0x00".
    Logisch, dass du da dann auch ständig 0x00 als Ergebnis bekommst.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Vorher stand da "TWSR and 0x02",
    es muss heissen "TWSR and 0xF8".
    Oder lass mal die ganze AND-geschichte weg, denn die prescaler Bits sollten ja sowieso nicht gesetzt sein, dann gehts auch.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2004
    Ort
    Leipzig
    Alter
    39
    Beiträge
    22
    Also ich hab jetzt den Vergleich mit dem Statusregister weggelassen.
    Funktioniert auch super. Danke euch.

    Aber mich würde trotzdem mal interessieren warum es nicht geht wenn
    ich das TWSR abfrage und mit einem bestimmen Code wie 0xF8 vergleiche.

    Wenn da mal ein Fehler, aus irgentwelchen Gründen, auf tritt, kann der mir das ja garnicht sagen.

    Viel Spaß
    Gruß

    Tobi

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Vergleichen solltest Du schon, aber das AND nach dem auslesen kannst Du weglassen.
    Hast Du nicht 'nen Port übrig, um zu debugzwecken den Wert an LEDs anzuzeigen ?

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2004
    Ort
    Leipzig
    Alter
    39
    Beiträge
    22
    Gute Idee. Bloß nen direkten Port hab ich jetzt nicht zur Verfügung.
    Aber ich kann ja gleich die LED's am PCF8574 nehmen den ich
    am I²C habe. Müsste ja funktionieren.

    Viel Spaß
    Gruß

    Tobi

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Möchte nur deponieren, dass es den Zustand 0x00 schon auch gibt, das ist ein saumässig grauslicher Fehler auf der Leitung.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2004
    Ort
    Leipzig
    Alter
    39
    Beiträge
    22
    ja jetzt hatts auch mit dem Vergleich des TWSR funtioniert.

    Ich hatte erst das TWSR ausgelesen und mir an einen Port
    über LED's zeigen lassen. So wies es linux_80 vorgeschlagen hatte.

    Und dann verglichen wie folgt.

    Code:
      
               lds     r16,TWSR
               andi   r16,0x08                      ;bei Start Bedingung
               cpi     r16,0x08
               brne  Error
               ....
    danke

    Viel Spaß
    Gruß

    Tobi

Berechtigungen

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

Labornetzteil AliExpress