Hallo zusammen Suuuper Forum, Gratulation! Als Ersatz für eine Steuerung entschied ich mich für einen ATmega644. Die HW ist folgendermassen aufgebaut: Inputs von 24VDC über Optokoppler auf uC mit 5VDC, Outputs über High Side Switches (schalten auch 24VDC). Eingänge mit Pull-Down Widerständen. HW wurde getestet, sollte keine Fehler aufweisen. Als Compiler verwende ich AVR Studio 4.0, welcher mir von div. Seiten empfohlen wurde. In Sachen C-Programmierung bin ich ein blutiger Anfänger aber leider bringe ich nicht einmal die einfache Ansteuerung der IOs zustande. Habe mir auch das Skript dieser Homepage zu Hilfe genommen... Kann mir bitte jemand auf die Sprünge helfen, wie der Code lauten muss um z.B. I portc pin0 ==> O porta pin0, I portc pin1 ==> O porta pin1... Habe viele Dinge ausprobiert und bin mittlerweilen frustriert und kurz vor der Resignation. P.S. nicht böse werden über meine Unerfahrenheit ;-) Danke im Voraus
Zeige mal, was du probiert hast. DDRC und DDRA richtig gesetzt? JTAG-Fuse gelöscht (Du verwendest PortC. Bei Auslieferung des Atmegas ist JTAG gesetzt und blockiert dir vier Pins von C)?
Probiert habe ich so Vieles. Diverse Dinge aus anderen Posts. Was für mich nach Datenblatt und dem AVR-GCC-Tutorial das Naheliegendste war: #include <avr/io.h> void mainLoop() { //main loop } void portTest() { DDRA = 0xff; //port a bit 0 to 7 as output DDRC = 0x00; //port c as input for(;;) //output active if... { PORTA = PINC; //checking condition from input and set output } } int main() { portTest(); mainLoop(); //never return } Aber das JTAG... Das könnte was sein. Wie müsste das im Code implementiert sein? THX for the help
Nicht im Code. Du programmierst die Fuses im AVRStudio unter Tools -> Program AVR... Ist in einem Karteireiter versteckt. In dem Bild ist JTAG deaktiviert.
Gerd G. wrote:
> Nicht im Code.
Und warum nicht?
1 | MCUCR = 1<< JTD; |
2 | MCUCR = 1<< JTD; |
Peter
Ach ja, zu deinem Programm:
1 | void portTest() |
2 | {
|
3 | DDRA = 0xff; //port a bit 0 to 7 as output |
4 | DDRC = 0x00; //port c as input |
5 | |
6 | for(;;) //output active if... |
7 | {
|
8 | PORTA = PINC; //checking condition from input and set output |
9 | }
|
10 | |
11 | }
|
for(;;){} ist eine Endlosschleife und wäre besser in der main() aufgehoben. Gehört nicht in eine Funktion, weil du da nicht mehr rauskommst. Beim Hauptprogramm ist das aber erwünscht. Mit PORTA = PORTC; kopierst du A auf C und negierst nicht. Du solltest vielleicht noch bei den Ausgängen die Pullup-Widerstände setzen. @ Peter Ja, ich weiß, dass das geht. Man kann es auch im Makefile machen. Ich wollte es einfach halten. Obwohl, das wäre es ja auch... Gruß Gerd
Wer suchet, der findet!! War definitiv die JTAG Sache. Absolut cool, jetzt macht die Sache wieder Freude. Muss man zuerst mal drauf kommen so als Laie... @ Gerd: würde dir jetz gerne ein Bier spendieren ;-) Vielen Dank für deine Hilfe @ Mark: danke auch dir für deinen Input
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.