1284P weigert sich bei Port D

Gast #4609175
Lesenswert?

Hallo Leute,

arbeite frisch mit einem 1284P. Soweit läuft alles. Die 
ISP-Programmierung, das 8-bit-Display, RX/TX....nun wollte ich trivial 
am Port D eine LED zum Leuchten bringen, aber nichts passiert. Mit dem 
ganzen Port D passiert nichts. Einige Pins sind auf Masse, andere auf 
4,3V (VCC=5V). Und egal was ich programmiere, es ändert sich nichts.

Da ich das schon eine Weile mache und die anderen Sachen (Display, 
RX/TX) problemlos laufen, kann es ja nur Hexerei oder eine Besonderheit 
des Chips sein. Natürlich ist alles richtig programmiert, es gibt keine 
Kurzschlüsse/Verbindungen etc. Auch Jtag ist aus. Da das Programm 
momentan auch nur aus Initialisierung und "toggle Portd.4" besteht, 
scheiden auch Programmierfehler aus....wer hat eine Idee? Bin für alles 
offen, danke.
Gast #4609187
Lesenswert?

Da natürlich alles richtig programmiert ist und Programmierfehler 
ausgeschlossen sind: Defektes Bauteil, Hexerei oder jemand hat die Suppe 
nicht ausgegessen..

Bitte mehr Infos, was ist programmiert, wie sieht die Schaltung aus?
Gast #4609209
Lesenswert?

Man merkt, daß Freitag ist und die Schule aus..und einige Wohl wieder 
"zu Unrecht" gemobbt wurden und nun ihren Frust im Netz auslassen.

Die Schaltung sieht gut aus, alles was angeschlossen werden musst, ist 
angeschlossen. Das wissen wir, weil ja Display und ISP und RX/TX 
funktionieren.

Pin 45 liegt sogar zweimal auf VCC/2, von beiden Seiten. Wie gesagt, es 
ist alles richtig angeschlossen.
Pind.5 ist zb 4,35V. Pind.4 ist 0. Pind.3 ist auch 0, Pind.2 ist wieder 
4,35V
Gast #4609242
Lesenswert?

Max schrieb:

> Man merkt, daß Freitag ist und die Schule aus..

Deswegen wohl dein Posting...

> Die Schaltung sieht gut aus, alles was angeschlossen werden musst, ist
> angeschlossen. Das wissen wir, weil ja Display und ISP und RX/TX
> funktionieren.

Das kannst du daraus nicht ableiten. ISP liegt ja nicht an PortD und 
auch das Display liegt wohl nicht an PortD. Und RX/TX (vermutlich 
gemeint: die von USART0) liegen zwar an PortD, sind aber gerade dadurch 
gekennzeichnet, dass die normale Funktionalität der Port-Pins 0 und 1 
durch die USART "overridden" wird, wenn die USART in Benutzung ist.

D.h.: Alles was "wir" zu wissen glauben, ist ein Trugschluss.

Allerdings glaube ich auch, dass der Fehler eher bei der Software liegt. 
Aber die hast du uns ja genauso vorenthalten, wie den Schaltplan...

Ich tippe mal darauf, das DDRD einfach nicht korrekt gesetzt wurde, um 
die Pins zu Ausgängen zu machen. Sei es, weil schlicht die entsprechende 
Anweisung im Code fehlt oder sei es, weil durch falsche Wahl des Targets 
die Registerzuordnung nicht passt.

In jedem Fall: Krasse Inkompetenz der menschlichen Komponente.
Gast #4609895
Lesenswert?

genau, deswegen mein Posting, weil Leute wie du ihren Schulfrust 
abbauen. Hatte ich schon geschrieben, aber du nicht gelesen..oder 
begriffen, wobei dann wieder das Argument "Schule" zieht...

Wie gesagt, schon ein paar Mal: Hardware und Software stimmen. Da 
braucht also auch nichts gezeigt werden, auch das hast du nicht 
begriffen, oder soll ich dir jetzt einen Apfel zeigen, damit du weißt 
was ein Apfel ist?
Dein Tip war, wie auch schon geschrieben, sinnlos, da alles richtig 
gesetzt worden ist...

Du bist nicht einmal in der Lage ein paar einfache Sätze zu lesen und zu 
verstehen, willst aber einen Schaltplan und Programm-Zeilen haben? Das 
beißt sich doch, du bist doch schon so überfordert.....

Aber in einer Sache hast du Recht: Krasse Inkompetenz der menschlichen 
Komponente.
Gast #4609966
Lesenswert?

Max schrieb:
> Wie gesagt, schon ein paar Mal: Hardware und Software stimmen.
Offensichtlich nicht du Spaten! Und jetzt schraub dich mal wieder 
runter. Du bist es, der hilfe will, und einen dreck dafür tut!
Zeig den Schaltplan und den Code oder du kannst dich gehackt legen!
Gast #4610069
Lesenswert?

Hallo Max,

ich habe Dir ein Testprogramm geschrieben.

Setup:
F_CPU = 8000000
Device = atmega1284p

Init:
* MCUCR.JTD = 1
* DDRA = 0xff, PORTA = 0x55
* DDRB = 0xff, PORTB = 0x55
* DDRD = 0xff, PORTD = 0x00

Der Timer0 liefert ein 125 Hz Zeitsignal und
der Wert von Portd wird bei jedem Zeitsignal +1 erhöht.
Also 0,1,2,3,...,255, 0,..

Der Timer1 liefert ein 2 Hz Zeitsignal und
die Ports PORTA und PORTB wechseln bei jedem Zeitsignal ihre Werte von 
0x55 zu (0x55 XOR 0xFF) = 0xAA, usw.

Die gesamte Ablaufsteuerung steckt somit in den beiden Timer0 und Timer0 
Interrupt Service Routinen.

Die Main-Loop ist leer.

Bitte berichte.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren