Hallo, ich habe ein Problem. Ich habe eine (funktionierende) Schaltung auf eine Platine portiert. Danach hat der in der Schaltung verbaute ATmage16 am Port D keine Signale mehr geliefert. Also neu geflasht und es kommt nur noch am I2c Bus ein Signal. Also wieder ausgebaut und auf eine Steckplatine gesteckt und angeschlossen (nur den ATmega), trotzdem kein Signal. Mit einem ATmega32 ging es auch nicht. Kann es sein, das der ATmega kaputt ist? Der ATmega32 war neu. Ich kompiliere unter Windows mit WinAVR und flashe mit AVR Burn-O-Mat und einem MySmartUSB MK3. Kennt jemand von euch das Problem und vielleicht auch die Lösung dazu? Sourcecode ist im Anhang. Display78
Display78 schrieb: > Danach hat der in der Schaltung verbaute ATmage16 am > Port D keine Signale mehr geliefert. JTAG-Fuse? Außerdem sieht Dein makefile nicht richtig aus. Es fehlen die meisten C-Sourcen. (Ich hab keine Ahnung von makefiles ...)
Display78 schrieb: > Danach hat der in der Schaltung verbaute ATmage16 am Port D keine > Signale mehr geliefert. Also neu geflasht und es kommt nur noch am I2c > Bus ein Signal Wie stellst du das fest? Was sollte sich da tun und was passiert stattdessen? > Sourcecode ist im Anhang. Wie wäre es, wenn du einen Dreizeiler schreibst, der nur mal an einem Portpin wackelt? > Ich habe eine (funktionierende) Schaltung auf eine Platine portiert. Wo hat die Schaltung schon funktioniert? Und wie hast du sie portiert?
Laie schrieb: > Außerdem sieht Dein makefile nicht richtig aus. Es fehlen die meisten > C-Sourcen. (Ich hab keine Ahnung von makefiles ...) Stimmt! Im makefile fehlen fasst alle Quellen:
1 | # List C source files here. (C dependencies are automatically generated.) |
2 | SRC = main.c |
3 | SRC += ks0108.c |
Lothar M. schrieb: >> Danach hat der in der Schaltung verbaute ATmage16 am Port D keine >> Signale mehr geliefert. Also neu geflasht und es kommt nur noch am I2c >> Bus ein Signal > Wie stellst du das fest? Ich messe an den entsprechnenden Pins mit einem Oszi. Am SCL Pin liegt ein 20kHz Signal an. Der SDA Pin liegt erst auf Low, sobalt ich SCL loslasse liegt high an beiden Pins an. Laie schrieb: >> Danach hat der in der Schaltung verbaute ATmage16 am >> Port D keine Signale mehr geliefert. > > JTAG-Fuse? Ist deaktiviert. Lothar M. schrieb: >> Ich habe eine (funktionierende) Schaltung auf eine Platine portiert. > Wo hat die Schaltung schon funktioniert? Und wie hast du sie portiert? Ich habe sie auf einer Stechplatine aufgebaut und getestet, dann mit KiCad einen Schaltplan gezeichnet, dann ein Platinenlayout erstellt und die Platine geätzt. Dann die Platine Bestückt, den geflashten AVR drauf und 5V angeschlossen. Laie schrieb: > Außerdem sieht Dein makefile nicht richtig aus. Es fehlen die meisten > C-Sourcen. (Ich hab keine Ahnung von makefiles ...) Es hat so mit genau dem gleichen (und einem anderen) Compiler funktioniert. Lothar M. schrieb: >> Sourcecode ist im Anhang. > Wie wäre es, wenn du einen Dreizeiler schreibst, der nur mal an einem > Portpin wackelt? Werde ich mal versuchen, allerdings mit allen Portpins. Schonmal vielen Dank für die bisherigen Antworten.
Display78 schrieb: > Ich habe sie auf einer Stechplatine aufgebaut und getestet, dann mit > KiCad einen Schaltplan gezeichnet, dann ein Platinenlayout erstellt und > die Platine geätzt. Dann die Platine Bestückt, den geflashten AVR drauf > und 5V angeschlossen. Hast Du die Platine durchgemessen und mit Lupe nach Unterbrechungen und Kurzschlüssen gesucht?
Display78 schrieb: > Werde ich mal versuchen, allerdings mit allen Portpins. Ich würde aber nicht mit allen Pins gleichzeitig in die gleiche Richtung wackeln, denn dann erkennst du keinen Kurzschluss zwischen zwei Portpins. Eigentlich müsste jeder einzelne Pins für sich selbst unabhängig von anderen Pins getestet werden. Aber prinzipiell reichen ein paar der fraglichen Pins aus um eine Aussage treffen zu können...
:
Bearbeitet durch Moderator
Dietrich L. schrieb: >> Ich habe sie auf einer Stechplatine aufgebaut und getestet, dann mit >> KiCad einen Schaltplan gezeichnet, dann ein Platinenlayout erstellt und >> die Platine geätzt. Dann die Platine Bestückt, den geflashten AVR drauf >> und 5V angeschlossen. > > Hast Du die Platine durchgemessen und mit Lupe nach Unterbrechungen und > Kurzschlüssen gesucht? Ich habe die Platine nicht durchgemessen. Ich habe mir die Platine aber angestaut und keine Kurzschlüsse, aber eine Unterbrechung in einer nicht wichtigen Leiterbahn gesehen. Der Rest sieht in Ordnung aus. Lothar M. schrieb: > Wie wäre es, wenn du einen Dreizeiler schreibst, der nur mal an einem > Portpin wackelt? Ich habe es jetzt versucht, allerdings wie angekündigt mit allem Portpins. Alle waren in Ordnung. wird wohl am Compiler liegen. ich versuche es mal unter Linux.
Display78 schrieb: > wird wohl am Compiler liegen. Eher nicht, denn der kann die Pins ja offenbar ansteuern...
Ich habe jetzt das Problem gelöst. Das Programm hing am setzen der Uhrzeit der DS1307. Ich habe die Displayroutinen jetzt davor gesetzt und Debugausgaben am Display hinzugefügt.
Hallo nochmal, ich habe ja das Problem teilweise gelöst. Allerdings gibt es nun ein neues Problem. Der Hardware-I2c liefert kein Signal am SDA-Pin. Am SCL kommt ein Signal. Durch die Port-Register kann ich den Pin schon ansteuern, aber halt nicht durch die I2c Register. Den Controller habe ich auch schon gestauscht. Es hat auch schon mit genau dem gleichen Programm mit der gleichen Compilerinstallation am gleichen PC funktioniert. Hat jemand von euch eine Idee, woran es liegen könnte?
An der Platine. Ein Messgerät sieht mehr als dein Auge.
Nein, das glaube ich nicht. Selbst wenn ich die Messspitze direkt an SDA vom AVR halte bekomme ich dort kein Signal.
Pullup ist dran. Es ist auch kein Masseschluss, da der Pin ja über die Portregister steuerbar ist.
Jetzt ist das Problem endgültig gelöst. Die 4,7K Pullup-Wiederstände wurden durch 20K-er ersetzt. Jetzt kommt an beiden Pins was an.
> Die 4,7K Pullup-Wiederstände wurden durch 20K-er ersetzt.
Das soll es gewesen sein? Glaube ich nicht. Ich vermute eher, dass du
bei den Lötarbeiten unbewusst noch einen anderen Fehler behoben hast.
Nein, ich habe noch mal nachgemessen und der eine Widerstand war ein 200K. Den muss jemand anderes(ich nutze die Bauteile nicht allein) falsch einsortiert haben, da sie ähnliche Farbcodes haben.
Wie, du hast jetzt 200k Ohm eingebaut und damit funktioniert es? Da stimmt doch was nicht, bei I²C sind 4,7k Ohm oder 10k Ohm üblich.
Nein, es waren erst ein 200k und ein 4,7k eingebaut, welche ich beide durch 20k ersetzt habe, da ich wusste, dass es damit geht.
Ach so, nun ergibt es Sinn. Dann was wohl tatsächlich die Fehlerursache.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.