Gute Tag, habe zwar schon paar Themen durch gelesen war bin aber nicht
draus schlauer geworden, deswegen wollte ich hier selbst mal fragen.
Die Frage ist Hardware oder Software Fehler..evtl. hilft mir einer dies
einzugrenzen.
Bevor ich mir eine Platine mit mehreren PCF8574 machen will, wollte ich
mich erst mal mitn Code befassen. Und dies aufn Testboard mit einem PCF
testen.
Er hängt hier
1
// send START condition
2
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
3
4
// wait until transmission completed
5
while(!(TWCR&(1<<TWINT)));
Benutzt wird die Routine von P.Fleury.
Im Anhang habe ich die 2 Text-Dateien ( die i2cmaster.c und meine Main )
Evtl seht ihr ja was.
Die 3 Adress Pin werden gegen GND Gezogen, und ich wollte einfach mal
alle PINS aus/an schalten.
SDA SCL werden mit 4k7Ohm gegen Vcc gezogen. Ansonsten sind direkt 2
kurze Strippe zum Atmega32. Die SDA und SCL haben sonst zu nichts
Kontakt.
Hardware schließe ich eigentlich aus ,weil ich mir keinen großen Reim
mehr drauf machen kann.
Hallo,
also wenn er wirklich in der gezeigten while hängt, dann schlägt schon
das senden Startcondition fehl - das muss selbst ohne angeschlossenen
Slave gehen, was eher auf einen Hardwarefehler hindeutet. Klemm den PCF
mal ab - dann müsste er in der while nach dem senden der Deviceadresse
hängen bleiben.
Kuba schrieb:> PCF8574Kuba schrieb:> i2c_start(0b01110000); <-----Adresse + Start
Die Adresse wäre passend für einen PCF8574A, du hast aber angeblich die
Version ohne "A". Überprüf das nochmal.
Oliver
Hi
>i2c_start(0b01000000);>Selber Effekt.
Das ist trotzdem erst mal die richtige Adresse für den PCF8574P.
Sind die Adresseingänge ordentlich an Masse angeschlossen?
MfG Spess
Ja, sind sie habe grade mal durch gemessen.
Hab sie aber direkt gegen GND ohne Vorwiderstand geschlossen, mit ändert
sich der Effekt nicht.
Ich schicke mal ein Bild vom Aufbau, es dient nur zu Testzwecken und das
Board an sich arbeitet, nur i2c nicht.
Kuba schrieb:> Abgezogen , hängt der trotzdem in der while, dies muss er doch wenn kein> Slave angeschlossen is ?
Nein wenn er in der 1. while hängt dann kann der Controller keine
Startcondition anlegen - also SDA & SCL auf GND ziehen!
Woher weißt du das er dort hängen bleibt?
Sascha
Welchen Pegel haben die beiden Leitungen SDA und SCL, während du am
Mikrocontroller die Reset Taste gedrück hälst? Es sollten 5V sein (bzw
wie hoch auch immer VCC ist).
Ist das dicke schwarze Kabel die GND Verbindung zwischen
Mikrocontroller-Platine und Steckbrett? Wenn nicht, verbinde GND
miteinander.
Ja, ist GND.
Wenn man nun misst wenn man nicht Debuggt, liegen so 4,85V am SDA um den
dreh an.
Debuggt man, liegt am SDA 0,211V an ca.
Die SCL Leitung bleibt bei 5V.
Veränderung des PullUp's bewirkt keine änderung leider.
Ich hätte erwartet, dass SCL und SDA beide die gleiche Spannung haben,
und zwar 5V oder knapp darunter.
Zu Beginn der Kommunikation müssten beide Leitungen auf Low gehen. Hast
Du kein Oszilloskop oder wenigstens einen Logikanalyzer? Wenn nicht,
könnte es hilfreich sein, auf software SPI umzusteigen, denn dann kannst
Du bei jeden Teilschritt der Datenübertragung einen Breakpoint setzen
und nachmessen.
Hast Du denn nun GND der beiden Platinen verbunden?
So hab nen Ozi geholt..uns gemessen.
Ich messe nur den Pegel SDA etwas unter 5V, wenn ich das Programm nicht
starte. Starte ich nun das Programm habe ich ein Singal Rechtecke, also
ein Signal überträgt er, allerdings nur 3,3V ca.
Die Clock Macht nix..aktivere ich die interne PullUps habe ich ein Clock
bei 5V..ganz Komische Geschichte
Deine Beschreibung der Messergebinsse ist ja wirklich toll!
Also wenn SCL nicht auf Low kommt ists auch kein Wunder das er die
Startbedingung nicht hinbekommt und in der while hängen bleibt.
Probier doch mal ohne TWI an SDA und SCL ne LED blinken zu lassen.
Sascha
JA tut mir leid für meine Fehlerbeschreibung.
Es geht auf einmal, frag bitte aber nicht warum.
Hab es beleidigt, Reset Taster 100x gedrückt und ein Kurzschluss
zwischen SDA SCL verursacht und es ging plötzlich...aber ich bedanke
mich für eure Hilfe.