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
Hallo! Fehler beim ATMEGA32 an PORTC, wenn da mal nicht JTAG am Proezessor eingeschaltet ist !? gruß, Bjoern
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^^
#include <avr/io.h> #include <avr/interrupt.h> void initPorts(void) { DDRA = 0xff; DDRC |= (1<<DDC0); } int main(int argc, char **argv) { initPorts(); //DDRA = 0xff; //DDRC = 0x01; while (1) { PORTC = 0x01; PORTA = 0xff; } } Probiere mal diesen Code. Das muss jetzt identisch zu dem main_running sein.... Gruß Sven
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.
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.