Anzeige:

ATMega48 steuert nur einen Teil der Pins richtig [gelöst]

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

ATMega48 steuert nur einen Teil der Pins richtig [gelöst]

Von Mister Red am 26.06.2010 14:30

Hallo Forumsmitglieder,

nachdem ich vor einiger Zeit hier, mit großer Hilfe insbesondere von Gerold, in die Welt der Mikrocontroller reinschnuppern konnte, fragte mich mein Vater vor kurzem ob ich ihm da nicht auch mal helfen könne.

Er wollte für seine Modelleisenbahn ein Kirmeskarussell beleuchtet haben. Die entsprechenden LEDs sollen dabei blinken.

Nachdem wir die Blinkabfolge sowie Farben usw. geklärt hatten habe ich folgendes Programm dazu auf einen ATMEGA48 übertragen:

1]
$regfile = "m48def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100



G1 Alias Portd.3
Config G1 = Output
G2 Alias Portd.4
Config G2 = Output
G3 Alias Portb.6
Config G3 = Output
G4 Alias Portb.7
Config G4 = Output
G5 Alias Portd.5
Config G5 = Output
G6 Alias Portd.6
Config G6 = Output

B1 Alias Portb.3
Config B1 = Output
B2 Alias Portb.2
Config B2 = Output

G1g2 Alias Portc.5
Config G1g2 = Output
G2g3 Alias Portd.2
Config G2g3 = Output
G3g4 Alias Portd.0
Config G3g4 = Output
G4g1 Alias Portd.1
Config G4g1 = Output

W11 Alias Portc.0
Config W11 = Output
W22 Alias Portb.5
Config W22 = Output
W33 Alias Portb.4
Config W33 = Output

Gr1 Alias Portb.1
Config Gr1 = Output
Gr2 Alias Portb.0
Config Gr2 = Output
Gr3 Alias Portd.7
Config Gr3 = Output

R11 Alias Portc.1
Config R11 = Output
R22 Alias Portc.2
Config R22 = Output
R33 Alias Portc.3
Config R33 = Output
R44 Alias Portc.4
Config R44 = Output

Do

G2 = 0
G3 = 0
G4 = 0
G5 = 0
G6 = 0
B2 = 0
G2g3 = 0
G3g4 = 0
G4g1 = 0
W11 = 0
W33 = 0
Gr3 = 0
R11 = 0
R22 = 0
R44 = 0
G1 = 1
Gr1 = 1
Gr2 = 1
G1g2 = 1
R33 = 1
W22 = 1
B1 = 1

Waitms 36
W22 = 0
W33 = 1

Waitms 22
B1 = 0
B2 = 1

Waitms 22
G1 = 0
G2 = 1

Waitms 10
R33 = 0
R44 = 1

Waitms 56
W33 = 0
W11 = 1

Waitms 30
B2 = 0
B1 = 1

Waitms 24
G2 = 0
G3 = 1

Waitms 20
G1g2 = 0
G2g3 = 1
R44 = 0
R11 = 1
W11 = 0
W22 = 1

Waitms 60
Gr1 = 0
Gr2 = 0
Gr3 = 1

Waitms 84
B1 = 0
B2 = 1

Waitms 29
W22 = 0
W33 = 1

Waitms 7
G3 = 0
G4 = 1

Waitms 33
R11 = 0
R22 = 1

Waitms 22
B2 = 0
B1 = 1

Waitms 14
W33 = 0
W11 = 1

Waitms 54
G4 = 0
G5 = 1

Waitms 40
G2g3 = 0
G3g4 = 1
R22 = 0
R33 = 1
W11 = 0
W22 = 1
B1 = 0
B2 = 1

Waitms 80
Gr3 = 0
Gr1 = 1

Waitms 60
G5 = 0
G6 = 1

Waitms 73
W22 = 0
W33 = 1

Waitms 15
B2 = 0
B1 = 1

Waitms 82
R33 = 0
R44 = 1

Waitms 96
W33 = 0
W11 = 1

Waitms 30
B1 = 0
B2 = 1

Waitms 44
G3g4 = 0
G4g1 = 1
R44 = 0
R11 = 1
W11 = 0
W22 = 1

Waitms 30
Gr1 = 0

Waitms 14
B2 = 0
B1 = 1

Waitms 29
W22 = 0
W33 = 1

Waitms 37
R11 = 0
R22 = 1

Waitms 42
B1 = 0
B2 = 1

Waitms 8
G6 = 0

Waitms 6
W33 = 0
W11 = 1

Waitms 74

Loop

End

1]

Die Übertragung, mittels des selbstgebauten Programmers nach Gerolds Bauanleitung, verlief fehlerfrei.
Anschliessend wollte ich die Funktionsfähigkeit auf einem Steckbrett testen!
Hierbei zeigte sich, dass jedoch nur ein Teil der Pins wie geplant funktioniert. Im Bild könnt ihr sehen, wie der Aufbau ( bitte nehmt es mir nicht übel, dass ich nicht jede LED inkl. Vorwiderstand für meinen Vater gezeichnet habe :wink: ) sein soll. Ausserdem ein Photo des Testaufbaus und welche Pins die richtige Ausgabe (grün umrandet) und welche gar keine Ausgabe (rot umrandet) gaben. Ich habe alle Pins durchprobiert und es zeigte sich, dass der rechte Teil funktionierte, der linke nicht.

Meine Frage ist nun, woran kann das liegen? Eine Internetrecherche half mir nicht weiter und auch in den alten Themen des Forums bin ich nicht fündig geworden.
Habe ich etwas übersehen? Weiss jemand von Euch Rat?

Vielen Dank schonmal für eure Hilfe und ein schönes Wochenende...
Red

Von Sam am 26.06.2010 18:33

Hallo
Ich glaube nicht, dass das jetzt viel hilft, aber ich würde zur Sicherheit mal einen Pull-Up an den Resetpin machen.
Überprüfe auch mal alle Fuses.

Dein Programmierstil ist sehr ungewöhnlich. Das muss ich mir noch ein paar mal durchschauen. Aber soll ja nur 'ne kleine Bastelei werden.

Ich werde mal noch weiter suchen.

MfG Sam

Von Elektron am 26.06.2010 19:03

Hallo Mister Red,

gewisse Pins sind bei den Atmel AVRs mit Sonderfunktionen belegt. Je nachdem, ob diese Sonderfunktionen gerade verwendet werden oder nicht, sind die Pins für die Sonderfunktionen reserviert und können daher nicht angesprochen werden. Abhilfe schaffst Du Dir indem Du herausfindet welche Pins nicht funktionieren. Vom entsprechenden Pin kann man über das Datenblatt auf die Sonderfunktion schließen und diese einfach deaktivieren - dann sollte es gehen.

edit:

Dein Aufbau schreit nach einem DEMUX Wink

Von pcprofi am 27.06.2010 01:13

Nur mal als Idee: Schau mal, ob in den Fuse-Bits JTAG eingeschaltet ist... Wäre eine typische Quelle für solche Fehler...

Gruß Rainer

Von caargoo am 27.06.2010 16:50

Hallo!

Über JTAG verfügt der M48 nicht!

Was für mich aus dem Plan nicht ersichtlich ist:
- ist der Resetpin beschalten
- Spannungsversorgung
- wieviele Led leuchten gleichzeitg

MfG
caargoo

Von Mister Red am 04.07.2010 22:01

Hallo zusammen!

Vielen Dank für Eure Antworten. Entschuldigt bitte, ich habe nur am Wochenende die Möglichkeit hier etwas zu schreiben und auch zu basteln. Diesmal ist es etwas spät geworden.

Ich gebe unumwunden zu, dass der "Programmierstil" ungewöhnlich ist. Meine Kenntnisse hier sind minimal. Aber vielleicht ist es eine Möglichkeit etwas längere (und mit runden Werten versehene) Pausenzeiten zu nehmen? Die Pins, die blinkten, taten das schon recht fix.
Was ist DEMUX?

Kann denn der Chip kaputt sein?


Also JTAG gibts in der Tat nicht beim ATmega48, ich habe mal die Anzeige der Fusebits angehangen, vielleicht ist dort ja doch noch eine Fehlerquelle.

Einen Pull-up an den Resetpin habe ich so verstanden, den Pin PC6 am Plus der Batterie anzuschliessen, was leider keine Lösung brachte.

Die Pins, die nicht funktionieren sind:
PD0 PD1 PD2 PD3 PD4
PC0 PC1 PC2 PC3 PC4 PC5

Es funktionieren
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
PD5 PD6 PD7

Ich habe mal in folgendem Datasheet nach Pinbelegungen gesucht, aber nichts gefunden, geschweige denn, wie man die Belegung entfernt.
http://www.alldatasheet.com/datasheet-pdf/pdf/83740/ATMEL/ATMEGA48.html

Ich ging davon aus, das bei einem neuen Chip nichts programmiert sei.

Die LEDs sind Low current und es leuchten immer nur ein Teil gleichzeitig. Bei meinem Test habe ich aber auch nur die, die man auf dem Bild sieht benutzt. Stromquelle sind erstmal 2 Micro Batterien, wie das ganze auf die Modellbahnanlage soll weiss ich noch nicht.

Ich hoffe ich konnte alle Fragen ausreichend beantworten, so dass sich noch eine Lösung findet!

Viele Grüße und einen schönen Restsonntag

Red

Von pcprofi am 05.07.2010 16:57

Ich habe jetzt noch nicht in den Code reingeschaut - aber was mich stört, ist, das nur der "obere" Teil der Pins nicht funktioniert.... Bei einem Defekt würde ich spontan davon ausgehen, dass entweder einzelne Pins oder ein ganzer Port ausfallen - beides hier nicht...

Bist du sicher, dass Avcc korrekt mit VCC verbunden ist? Nicht verpolt? (Achtung - Pins verdreht!)

Von Mister Red am 09.07.2010 23:18

Hallo pcprofi,

das hätte ich auch gedacht, dass dann der ganze Chip nicht mehr macht.

Also ich habe das ganze nochmal an anderer Stelle am Steckbrett aufgebaut (Aufbau wie oben auf dem Bild) und alle Pins überprüft. Es ist keiner verdreht und auch sonst ließen sich keine Fehler finden.

Ich kann mir schwer vorstellen, dass es am "Code" liegen kann. Mangels besseren Programmierstils habe ich alle Pins nach dem gleichen Muster programmiert.


Irgendwie weiss ich nicht, woran das liegen kann.
Vielleicht hat ja noch jemand eine Idee! In jedem Fall danke schonmal für Eure Tipps!

Viele Grüße
Red

Von Elektron am 10.07.2010 11:53

Hast du einen Austauschcontroller zur Hand? Manchmal gibt es Fehler die will man sich nicht erklären, und man kann sich so sehr viel Zeit sparen Wink Vielleicht liegt es ja wirklich am Controller selbst. Das ist zwar bei einem neuen Controller nicht wahrscheinlich, aber dennoch möglich.

Von Mister Red am 10.07.2010 18:58

Hallo Elektron,

danke für den Hinsweis! Ich habe noch einen ATmega88V gehabt, den ich heute getestet habe. Bei der Übertragung gab es wieder keine Fehlermeldung, aber dieselben Pins funktionieren nicht!!!

Kann es doch am "Code" liegen? Oder könnte ein Fehler im Programmer vorliegen? Aber wieso gibt es dann keine Fehlermeldung?


Gruß

Red

Anzeige: