-
        

Ergebnis 1 bis 4 von 4

Thema: Probleme mit Hardware-TWI (2 x Mega 168) [gelöst]

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451

    Probleme mit Hardware-TWI (2 x Mega 168) [gelöst]

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi,

    ich versuch schon seit einer knappen woche, eine TWI-übertragung zwischen zwei Mega168 hinzubekommen.

    hab am anfang ein Programm aus dem internet für den Mega8 genommen und auf den mega168 umgeschrieben... warn ja nur manche in durch lds und out durch sts zu ändern.

    Das programm wollte nicht, es kahm immer wieder zu einem bus-fehler.

    An meinem bus hängen je and SCL und SDA ein 10k widerstand gegen VCC. wie es auch in mehreren forembeiträgen beschrieben wurde (hab auch schon andere widerstände versucht: 4k7 oder auch nur 200 ohm).

    Da das programm aus dem internet nicht funktioniert, hab ich mir ein eigenes masterprogramm geschrieben, das mir die ganzen Bus-fehler ausgibt (zumindest die im Datenblatt). Zur zeit hab ich aber das problem, dass er mir erfolgreich eine gesendete startbedingung ausgibt und dann eine fehlermeldung die nicht im datenblatt zu finden ist...

    an was kann das liegen? ich versuch mein code noch hochzustellen, aber da müsst ich den vlt noch vorher kommentieren und ein bischen ordnen.

    fall euch noch was einfällt, dass ich vergessen haben könnte, schiest los.

    mfg robin

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    46
    Beiträge
    104
    Ich gehe davon aus das Du mit Fehlermeldung den Inhalt des TWSR meinst? Was steht denn drin?

    Rajko

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    hi,

    ich hab jetzt mal einen master- und einen slavecode geschrieben.

    der Master soll das byte 0b10101010 an die slave senden und gibt dabei dann jedes mal den inhalt des twsr aus.

    die übertragung sieht folgendermasen aus.

    -master sendet erfolgreich startbedingung
    -master sendet adresse+w und erhält ack
    -slave zeigt an, dass sie andressiert wurde und ack gesendet wurde...

    und dann hängt sich der bus auf. es wird dann einfach nichts mehr angezeigt.

    Meine vermutung ist es jetzt, dass sich die slave nichtmehr angesprochen fühlt.

    meine frage ist jetzt, was muss ich in das kontrollregister (twcr) schreiben, nachdem twint ausgelöst wurde? hat der mega168 vlt. irgentwelche macken, die nicht im datenblatt erwähnt werden?

    mfg robin

    EDIT:

    hier noch mein code:

    Master (die wait-Schleifen sind nur dazu da, dass die leds länger leuchten
    TWI_INT ist wie bei der slave ein vergleich von TWSR):
    Code:
    main:
    		rcall wait
    		rcall TWI_Start
    main1:	lds r16,twcr
    		sbrs r16,7
    		rjmp main1
    		rcall twi_int
    		rcall wait
    		rcall TWI_send_adr_w
    main2:
    		lds r16,twcr
    		sbrs r16,7
    		rjmp main2
    		rcall twi_int
    		rcall wait
    		rcall TWI_send_data
    main3:
    		lds r16,twcr
    		sbrs r16,7
    		rjmp main3
    		rcall twi_int
    		rcall wait
    		rcall twi_stop
    main4:
    		lds r16,twcr
    		sbrs r16,7
    		rjmp main4
    		rcall twi_int
    		rcall waits
    		rjmp main
    Slave (dieser code wird per interrupt gestartet):
    Code:
    twi_int2:
    	lds r16,twsr
    	andi r16, 0xf8
    	cpi r16,0x60
    	breq twi_sla_w_ack
    	cpi r16,0x68
    	breq twi_arbitration_lost
    	cpi r16,0x70
    	breq twi_generell_call
    	cpi r16,0x78
    	breq twi_arbitration_lost
    	cpi r16,0x80
    	breq twi_data_rec_ack
    	cpi r16,0x88
    	breq twi_data_rec_nack
    	cpi r16,0x90
    	breq twi_data_rec_ack
    	cpi r16,0x98
    	breq twi_data_rec_nack
    	cpi r16,0xa0
    	breq twi_stop
    	rjmp fatal_error
    
    twi_sla_w_ack:
    ldi r16,1
    out portb,r16
    ret
    
    fatal_error:
    ldi r16,2
    out portb,r16
    ret
    
    twi_arbitration_lost:
    ldi r16,3
    out portb,r16
    ret
    
    twi_generell_call:
    ldi r16,4
    out portb,r16
    ret
    
    twi_data_rec_ack:
    ldi r16,5
    out portb,r16
    ret
    
    twi_data_rec_nack:
    ldi r16,6
    out portb,r16
    ret
    
    twi_stop:
    ldi r16,7
    out portb,r16
    ret

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.11.2004
    Beiträge
    451
    hab mein fehler gefunden,

    war eigentlich recht blöd, hab vergessen TWINT zu löschen und somit den port wieder freizugeben.

    mfg robin

    ps.: falls ihr interesse am ganzen code habt, den kann ich gerne noch hochladen.
    Es ist einmal ein Master transmitter und ein slave reciever. beides auf einem m168

Berechtigungen

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