I²C Problem

Gast #69955
Lesenswert?

Hallo,
ich versuch schon seit mehreren tagen vergebens einen PCF8547AP an
einem Mega8 zum laufen zu bringen.Der Code ist im Anhang. Das ganze
leuft auf einem STK500. Hab keien ahnung woran es liegen könnte. Ich
kontroliere den Status über das UART. Das Prog leuft bis zum ersen
auswerten des TWSR registers (bei wait1) "normal" ab. Bei der
überprüfung bricht er ab und springt zu error. am terminal wird dann
aber trotzdem 0x08, also der eigentlich richtige wert ausgegeben. Das
Progrmm kommt original aus dem Datenblatt des Mega8.
Kann vieleicht mal jemand schaun ob er eien Fehler findet? Oder liegt
es vieleicht an der hardware ? Pullups und nen kondensator paralell zum
PCF hab ich eingebaut.

mfg

Max
Angehängte Dateien:
Gast #69956
Lesenswert?

Hi!
>  in temp, TWSR
>  andi temp, 0xF8
>  cpi temp, 0b00001000 ;0x08
>  brne ERROR
Das kann nicht gehen weil du $F8 mit $08 vergleichst und das ist doch
wohl augenscheinlich was anderes.
Also entweder $08 & $08 oder $F8 & $F8.
cpi ist umgesetzt "temp" - $08 und da soll ja "null" rauskommen.

 muss lauten:
  in temp, TWSR
  andi temp, 0x08
  cpi temp, 0b00001000 ;0x08
  brne ERROR
oder:
  in temp, TWSR
  andi temp, 0xF8
  cpi temp, 0b11111000 ;0xF8
  brne ERROR


MFG Uwe
Gast #69957
Lesenswert?

Hallo Uwe

Irgendwie kann ich dir nicht ganz folgen.
mit andi temp, 0xF8 erden doch einfach nur die drei unteren bits
(prescaler bits)herausgefiltert. es soll nur geprüft werden, ob das 4te
bit gesetzt ist oder nicht.

mfg

Max
Gast #69958
Lesenswert?

Jep, Max, hast recht.
Ich habe mal kurz drübergeschaut, aber noch nichts entdeckt. Wenns
klappt, schaue ich mir heute abend alles nochmal an, ich habe schon
mehrere TWI-Anwendungen am Laufen.
Gast #69959
Lesenswert?

Hi!
Du kannst schon alle bits ausfiltern, nur kannst du dann nicht mit cpi
nur das 4.Bit prüfen weil bei cpi 8 Bit gleichzeitig getestet werden.
-oder kann nur Bit3 gesetzt sein???,dann wäre es richtig.
<cpi ist umgesetzt "temp" - $08 und da soll ja "null" rauskommen.
ein richtiger Bittest wäre:
in temp, TWSR
  andi temp, 0xF8  ;kann jetzt sogar weggelassen werden
  sbrs temp,3      ;überspr.wenn in temp Bit3 gesetzt
  rjmp ERROR
   ...

habe schnell nochmal ins Datenblatt geschaut.-Du hast recht, es kann
eigentlich nur Bit3 gesetzt sein -und du hast ja auch $08 über UART-

Sehr eigenartig! uC-Fehler??? Bin bei 1.Antwort von mehreren gesetzten
Bit's ausgegangen.

MFG Uwe
Gast #69960
Lesenswert?

CPI wird deshalb verwendet, weil die TWI-Schnittstelle verschiedene
Status-Codes ausgibt. Das können auch Bitkombinationen sein, bei dieser
speziellen Abfrage von $08 sieht das ein wenig unglücklich aus, ist
aber so an und für sich richtig.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren