Forum: Mikrocontroller und Digitale Elektronik I²C Problem


von Max (Gast)


Angehängte Dateien:

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

von Uwe (Gast)


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

von Max (Gast)


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

von thkais (Gast)


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.

von Uwe (Gast)


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

von thkais (Gast)


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.

von Max (Gast)


Lesenswert?

Hallo

@thkais
Danke das du dir mein programm mal anschauen wilst. Bin zwar nich
tgerade am verzweifeln, aber schön langsam wurmts mich doch.

mfg

Max

von Max (Gast)


Lesenswert?

Hallo thkais

hast du schon as herausgefunden?

mfg

Max

von Jonny (Gast)


Lesenswert?

Hi!
Wo finde ich datenblätter über den IC PCF8547AP.


Jonny

von Gerhard (Gast)


Lesenswert?

.... die Datenblätter findet man u.a. bei Reichelt.de
Suche dort den PCF8574, dann gibt es dort einen Downloadbereich.

vg.  gerhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.