Hallo zusammen,
ich interessiere mich viel für µC's, sodass ich in meiner Freizeit immer
etwas an den Dinger rumbastle. - An dieser Stelle ist diese Seite/Forum
phantastisch. - Angefangen mit nem mega8, jetzt mit einem mega32 auf dem
Pollin-Board. Geproggd wird über einen selbstgebauten
Parallelport-Programmer mit Hilfe von PonyProg. Entwicklungsumgebung ist
Eclipse.
Erste Erfahrung mit dem Programmieren von µC's sammlte ich in Assembler
und versuche mich jetzt in C.
Kenntnisse in Jave, C und C++ sind vorhanden, auch wenns nur die
Grundlagen sind :)
Zur meinem Problem:
Habe hier eine ganz billige Schaltung: 4-digits 7Segment-Anzeige auf nem
Board geteckt und bin dabei diese mit dem mega32 anzusteuern, folgendes
Phänomen ist mir aufgefallen:
Um mir die Arbeit zu sparen, was die Initialisierung der Ports angeht,
dachte ich an eine kurze und knappe void-funktion: void initPorts(void),
die entsprechend die Bits in DDRA und DDRC setzen soll, ich also im
weiteren Verlauf des Hauptprogramms nur noch die PORTx-Zustände ändern
kann.
WENN ich mit dieser Technik arbeite, und in der main anweise: PORTA =
0xff;
liegt am PIN4 ein Pegel von 2,55V an, die Restlichen bei um 4,8V
Ändere ich jetzt die Initialisierung dahingehend, dass ich auf die
initPorts()-Funktion verzichte, und die Initialisierung unmittelbar vor
der Hauptfunktion setze, dann habe ich auch am PIN4 (PortA) ein Pegel
von annährend 5V, sprich die LED leuchtet.
Meine Frage jetzt, kann es sein, dass der Compiler da was durcheinander
bringt ?
Wie können überhaupt 2,55V an einem PIN anliegen ?
Ich hänge entsprechend die Datei mit an, es handelt sich hauptsächlich
um die Zeilen 43,44 bzw. 64. (Ich weiss, kein toller Code, aber ich
denke nachzuvollziehen)
Ich kann auch mit einer "direkten" Initialisierung arbeiten, nur wissen
würde ich es schon gerne, warum sowas auftritt.
Für Eure Hilfe und Zeit danke ich schon mal im Voraus
Gruß
Cyrill
So wie ich das sehe, müsste er beim weiteren compilieren Fehler
ausspucken.
Versuche mal die Funktionen alle ÜBER!!! der main Funktion zu schreiben.
So müsste er eigentlich beim linken meckern das er die Funtion nicht
findet.
Gruß Sven
Danke für die schnelle Antwort.
Bin deinem Rat gefolgt und die Funktionen über der main gesetzt, die
Prototypen auskommentiert und leider der selbe Effekt, PIN4 2,55V und
keine Fehler- noch Warningausgabe beim Compilieren.
Hmm, jetzt wirds interessant,
ja, JTAG war gesetzt, jetzt rausgenommen und das Problem bleibt
bestehen.
Vorwiderstände sind auch da, die digits selbst werden über ein BC548B
angestuert. -> Pins sind mir an dieser Stelle wichtig :)
wie gesagt, werden die Zeilen 43/44 quasi getoggelt, liegt an PIN4
entsprechend 2,55V bzw. 5V an. Einmal sichtbar, über die LED,
anderesseits gemessen. Daraus schließe ich, das der PORT bzw. der PIN in
Ordnung ist, was, nebenbei, mein erster Gedanke war, dass sich den Port
zerschossen habe.
Du hattest ja schon code laufen, kannst Du mal bitte den Code der
funtioniert und dann den der nicht funtioniert bitte zeigen.
1. main_running.c / 2. main_failed.c in eine zip-Datei.
Dann kann man das noch besser überprüfen.
Und hast Du einen Schaltplan ?
Gruß Sven
Hab das jetzt nochmal auf das Wesentliche gekuerzt, um den Unterschied
zu sehen, habe sogar 2 neue Projekte erstellt und das Verhalten
reproduziert.
Im Anhang sind die 2 main-Dateien, die den Effekt erzeugen.
Schaltplan habe ich nicht gemacht, da ich alles direkt auf dem
Steckbrett aufgebaut habe. Allerdings kann ich Fehler dort ausschließen,
da ungeändert dessen, wird die MCU entsprechend den angefügten Files
geflasht mit dem erwähnten Effekt.
Jedoch, die Schaltung entspricht diesem hier:
http://www.klaus-leidinger.de/mp/Mikrocontroller/7Segment/7Segment.html#oben
mit dem Unterschied, dass ich digits mit gemeinsamer Kathode habe.
PortC stuert die digits, PortA die Segmente.
Ahso, eins noch:
Zum Thema JTAGn, das Bit: JTAGEN in PonyProg habe ich wieder gesetzt(wie
es war), da sonst in beiden Fällen die LED nicht leuchtet.
Meine, das die FuseBit-Geschickte auch irgendwie invertiert ist, doer ?
sprich 1 -> Deaktiviert, 0 -> aktiviert ?!
>>Geproggd wird über einen selbstgebauten>>Parallelport-Programmer mit Hilfe von PonyProg.
beim pollin board ist doch ein prorammer mit dabei, aber naja^^
Ja, das geht, in der Tat,
jedoch bin ich grad auf Sprung und kann mich erst später um die
eigentliche Arbeit der MCU kümmern.
Danke schon ma im Voraus, d.h. dass der Linker nicht richtig linkt ?
Werd mir dann angewöhnen müssen alles vor die main zu schreiben.
@Gast, ja Pollin hat auch einen Programmer onBoard, jedoch seriel und
ich kann keine 2secs länger beim progn warten :) - ausserdem bin ich zu
faul jedesmal zwischen ISP und UART zu switschen.