Forum: Mikrocontroller und Digitale Elektronik ATmega16 liefert kein Signal an allen Pins außer I2c


von Display78 (Gast)


Angehängte Dateien:

Lesenswert?

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

von Laie (Gast)


Lesenswert?

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 ...)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Baldrian (Gast)


Lesenswert?

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

von Display78 (Gast)


Lesenswert?

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.

von Dietrich L. (dietrichl)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Display78 (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Display78 schrieb:
> wird wohl am Compiler liegen.
Eher nicht, denn der kann die Pins ja offenbar ansteuern...

von Display78 (Gast)


Lesenswert?

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.

von Display78 (Gast)


Lesenswert?

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?

von Hubert G. (hubertg)


Lesenswert?

An der Platine. Ein Messgerät sieht mehr als dein Auge.

von Display78 (Gast)


Lesenswert?

Nein, das glaube ich nicht. Selbst wenn ich die Messspitze direkt an SDA 
vom AVR halte bekomme ich dort kein Signal.

von Ludger (Gast)


Lesenswert?

Masseschluss oder kein pullup ?

von Display78 (Gast)


Lesenswert?

Pullup ist dran. Es ist auch kein Masseschluss, da der Pin ja über die 
Portregister steuerbar ist.

von Display78 (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> 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.

von Display78 (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Display78 (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.