Versuche mich nun mit TWI aus dem Tut's werdee ich leider nur langsam
schlau..deswegen habe ich mir mal eine Funktion zusammen geschrieben um
es mir selber näher zu bringen...natürlich ist noch einiges vom Tut
übernommen und ich wollte bevor ich was Eigens schreibe erst mal die
Funktion testen.
Verwenden tue ich ein PCF8574 an dem ne 7 Segment anzeige hängt.
Es funktioniert aber leider nicht, evtl. stimmt was mit dem Code nicht ?
Oder kann dies überhaupt funktionieren ? Sollte ich lieber Start / Stop
Daten Adresse / Init einzeln als Funktion aufrufen ?
Jakob schrieb:> Es funktioniert aber leider nicht, evtl. stimmt was mit dem Code nicht ?
Das mag schon sein.
> Oder kann dies überhaupt funktionieren ? Sollte ich lieber Start / Stop> Daten Adresse / Init einzeln als Funktion aufrufen ?
Letzten Endes wird es irgendwan darauf hinaus laufen. Allerdings ist das
nicht dein Problem - es kann nicht dein Problem sein. Denn der Code ist
ja derselbe, egal ob du jetzt alles in einer Funktion hast, oder ob du
mehrere Funktionen hast.
Fang halt mal mit Debugging an. Ja, da muss man sich dann eben was dazu
überlegen. Wenn man gar nichts anderes hat, dann baut man sich eben an
einen Port ein paar LED und sieht zu, dass man mit Leuchtmustern auf
diesen LED dem Programm die Information entlocken kann, was es wann und
warum gemacht hat, bzw. welcher Fehlerzustand aufgetreten ist.
Du gibst hier
zb einen Fehlerstatus zurück, benutzt ihn aber an der aufrufenden Stelle
nicht.
Ichg würde mal meinen, dass sich so ein Fehlerstatus hervorragend dazu
eignen würde, dir als Entwickler mitzuteilen: Huston, wir haben ein
Problem und zwar ist der Fehlerstatus 1 aufgetreten.
> twst = TW_STATUS & 0xF8;> if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
Dann wäre es eine gute Idee, hier nicht 1 als Fehlerstatus zu verwenden,
sondern eine andere Zahl. Denn mit dieser Anderen Zahl erzählen dir dann
die LED die Geschichte, dass es hier ein Problem gegeben hat.
etc. etc.
Ja, auch Debugging und "wie kann ich mir helfen dem Programm zu
entlocken was Sache ist" muss gelernt werden.
Ich persönlich würde mir ja erst mal vom P.Fleury die TWI Routinen holen
und mit denen kontrollieren, ob die Hardware in Ordnung ist, ehe ich
eigene Routinen schreibe
Ich werd mich mal mit dem Debuggen befassen und gucken ob ich ein Fehler
finde. Ob der PCF was ausgibt würde ich an der Segment Anzeige sehen.
Die Adresse wäre 0b01000000 da ich an den Adress PINs nix anliegen habe.
Werde jetzt auch erstmal mitn Ozi gucken ob der Atmega überhaupt was
ausgibt.
Dann auchmal mit der Routine von P.Fleury
Jakob schrieb:> Ich werd mich mal mit dem Debuggen befassen und gucken ob ich ein Fehler> finde. Ob der PCF was ausgibt würde ich an der Segment Anzeige sehen.
Das war mir schon klar :-)
>> Die Adresse wäre 0b01000000 da ich an den Adress PINs nix anliegen habe.
wörtlich 'nix' oder hast du dort Pulldowns bzw. direkte Verbindungen zu
GND?
Auf die Schnelle hab ich im Datenblatt nicht gefunden, ob man die Pins
offen lassen kann. Sicherheitshalber mit GND verbinden (entweder direkt
oder über einen Pulldown).
> Werde jetzt auch erstmal mitn Ozi gucken ob der Atmega überhaupt was> ausgibt.
Auch eine gute Idee.
Hi
>Auf die Schnelle hab ich im Datenblatt nicht gefunden, ob man die Pins>offen lassen kann.
Kann man nicht:
To conserve power, no internal pull-up
resistors are incorporated on A2, A1 or A0, so they must be externally
held HIGH or LOW.
MfG Spess
Sooooo...natürlich hat der Herr hat natürlich die SCl SDA falsch
angeschlossen...aber arbeiten tut das ganze nicht =D
Am SDA Ausgang liegt was anständiges an, aber am SLC nur Quatsch . Hab
jetzt für's erste die Routine genommen. Nur die Frequenz auf 16Mhz
geänder sonst nix...meine Main sieht wie Folgt aus :
Durch das Pull-up setzten von SDA und SCL hab ich jetzt ein
vernünftiges Clock Signal, aber...Das Daten Signal liegt bei ca. 3,3V
ist ja ok halt die Atmega Spannung aber das Signal liegt nur dann an
wenn ich Debugge also das Programm starte, stoppe ich dies ist das
Signal weg, und liegt bei 3,3V (Konstante Spannung) stecke ich den JTAG
ab liegen die 5V an...
Kann mir das wer helfen hier nochmal der Code
Die Pull-Up Widerstände benutze ich intern.
Es kommt was am PCF an, messen tue ich das mit einem Ozi.
Aber Ich vermute dass, das Signal was ankommt zu niedrig ist, die Spitze
ist 3,3V müsste eigentlich ja 5V sein wenn ich mich nicht vertue?
Aber auch nur wenn das Programm läuft wenn ich es stoppe im AVR-Studio
liegt nur noch die 3,3V Konstante Spannung an, ist der JTAG ab liegen 5V
an aber kein Signal mehr.
Hi
>Die Pull-Up Widerstände benutze ich intern.
Die sind um etwa eine Größenordnung zu groß.
>Es kommt was am PCF an, messen tue ich das mit einem Ozi.>Aber Ich vermute dass, das Signal was ankommt zu niedrig ist, die Spitze>ist 3,3V müsste eigentlich ja 5V sein wenn ich mich nicht vertue?>Aber auch nur wenn das Programm läuft wenn ich es stoppe im AVR-Studio>liegt nur noch die 3,3V Konstante Spannung an, ist der JTAG ab liegen 5V>an aber kein Signal mehr.
Riecht nach einem Schaltungsfehler.
MfG Spess
Ja aber Pc0 Pc1 leigen auf der Platine ja offen und haben keine
Verbindung zu anderen Sachen, und selbst wenn ich diese nicht mit dem
PCF Verbinde kommt das Problem.
Hi
>Ja aber Pc0 Pc1 leigen auf der Platine ja offen und haben keine>Verbindung zu anderen Sachen, und selbst wenn ich diese nicht mit dem>PCF Verbinde kommt das Problem.
Gib dir mal etwas mehr Mühe. Es kann doch nicht so schwer sein auch noch
den letzten Rest sinnvoller Informationen aus deinen Aussagen zu
entfernen.
MfG Spess
spess53 schrieb:> Hi>>>Die Pull-Up Widerstände benutze ich intern.>> Die sind um etwa eine Größenordnung zu groß.
Wenn sie im Sondermodus TWI überhaupt funktionieren.
Ich denke, die Atmel Ingenieure haben sich schon etwas dabei gedacht,
wenn sie im Datenblatt (Seite 169) schreiben
1
The only external hardware needed to implement the bus is a single
2
pull-up resistor for each of the TWI bus lines.
und die entsprechenden Widerstände in den Schaltskizzen auch
einzeichnen.
Wenn die internen Pullup Widerstände funktionieren würden, dann würden
sie das wahrscheinlich auch im TWI-Kapitel erwähnen. Tun sie aber nicht.
Hi
>Wenn die internen Pullup Widerstände funktionieren würden, dann würden>sie das wahrscheinlich auch im TWI-Kapitel erwähnen.
Die funktionieren auch bei TWI.
Datenblatt, Alternate Port Funktions:
SDA – Port C, Bit 1
...
When this pin is used by the Two-wire Serial Interface, the pull-up can
still be controlled by the PORTC1 bit.
MfG Spess
spess53 schrieb:> Hi>>>Wenn die internen Pullup Widerstände funktionieren würden, dann würden>>sie das wahrscheinlich auch im TWI-Kapitel erwähnen.>> Die funktionieren auch bei TWI.
Aber, wie du schon sagtest, die sind zu groß.
Beim verwenden von den internen Pull-UP's :
Clock-Signal ok.
Daten-Sugnal Ist da aber nur bei 3,3V ( Und wie erwähnt nur beim
Debuggen )
10K oder auch 4k7 Pull Up :
Daten-Sugnal Ist da aber nur bei 3,3V ( Und wie erwähnt nur beim
Debuggen )
Clock Kommt nicht an.
Hi
>Beim verwenden von den internen Pull-UP's :>Clock-Signal ok.>Daten-Sugnal Ist...
Und wo gemessen? Ehrlich gesagt, klingt das Ganze für mich irgendwie
nach einem Masseproblem.
MfG Spess
Ich werde das ganze jetzt erst mal auf ner Lochraster aufbauen evtl ist
dieses Steckboard käse.
ATmega32 habe ich auch schon einmal testeshalber getauscht.
Gemessen habe ich einmal direkt an den PINS ( mit Pull Up extern/intern
aber ohne PCF)
Dann an den Pins vom PCF.