Hallo zusammen.. Wollte jetzt doch mal versuche mit dem WinAVR und AVR Studio starten.. Habe mir ein kleines Programm (test.c) geschrieben, das Makefile dazu angepasst und dann mit make, im selben Vrz. das HEX erzeugt. Dieses habe ich dann auf meinen "kleinen" Mega8 drauf gepackt, aber er tut leider nichts.. :-( Hier die Dateien: -- test.c -- #include <avr/io.h> #define SYSCLK 4000000 int main(void) { DDRB = 0xff; PORTB = 0xff; while(1) { PORTB = 0x00; PORTB = 0xFF; } /* NEVEREACHED */ return (0); } -- ENDE -- Das Makefile habe ich mal angehängt, ist mit MFile generiert, evt. liegt ja da der Hund begraben? Habe mir das GCC-Tut schon angeschaut.. Danke für eure Hilfe..!
Naja, eigentlich sollte er den PORTB invertieren!? Habe mir das Signal mit nem Oszi angeschaut, leider nichts ..
wenn du das ganze nur so kurz machst wird man vielleicht nicht viel sehen können und aßerdem bin ich mir nicht sicher ob das so geht wie du es geschrieben hast... das ist eher das codevision usw. code -- test.c -- #include <avr/io.h> #define SYSCLK 4000000 int main(void) { outp (0xff,DDRB); outp (0xff,PORTB); while(1) { outp (0x00,PORTB); outp (0xFF,PORTB); } /* NEVEREACHED */ return (0); } probier das mal so... glaube die PORTx DDRx usw kann man so nicht verwenden.
empfehlenswert sind auf jedenfall die beispiele, die man hier in auf der gcc installations-hilfe seite runterladen kann ... das gcctest.zip
Hi @manu Also wenn ich dein Programm mit deinem Makefile übersetze kann ich das Programm im AVRStudio simulieren und der PortB toggelt auch. Ich vermute also du hast ein Hardware/Softwaredownload Problem. @Sebastian Das was du da als AVRGCC-Code verkaufst war vor Jahren noch nötig. In der nächsten Version von WINAVR werden diese Makros schon garnichtmehr unterstützt. Matthias
Hi zusammen, hmm.. komisch.. Wenn ich ein anderes, Test Programm von mir (allerdings Assembler) auf den µC Lade läuft es.. Habe auch schon versucht, das ganze im AVRStudio zu simulieren, allerdings stürzt es beim öffnen der Datei ab.. :-( Habe mal mein HEX File angehängt, erzeugt mit meinem oben geposteten Code.. Evt. kannst du es ja mal mit deinem vergleich, Matthias!
Hi @manu Die Dateien sind nicht identisch. Im Anhang mal mein HEX-File. Matthias
Kann man beim "neuen" AVR Studio auch direkt mit HEX Files simulieren? .. Lade es gerade mal schnell runter, ich habe noch eine 3er Version! Das HEX File habe ich mit meinem Yaap Programmer auf dem MEGA8 kopiert, lief alles ohne Fehler. Seltsam!
Habe nun das 4er AVR Studio und soeben meine HEX und die von Matthias durch Simuliert. Im Simulator scheinen beide zu funktionieren!
Vermutung: Auf dem realen AVR ist das evtl. viel zu schnell, entweder kommt die Port Elektronik des AVR nicht hinterher, wenn man nur "speed-togglet", oder das OSZI kann nix. Ich würde mal ein dickes Delay zwischen die beiden PORTB= packen und nochmal schauen.
Naja, eigentlich sollte er das schon können, oder? In Assembler packet er das ja auch... Das OSZI kann das schon, wenn ich an den Quarzoszillator gehe, sehe ich auch das Signal.. Es kann eigentlich bis 100MHz messen.
@Matthias das tut mir aber jetzt furchtbar... sorry vor einiger zeit hatte ich mal wurde diese thema schon mal diskutiert und damals hieß es daß z.B. PORTx=0x?? kein ansi c ist und auch nicht vorgesehen ist diese art der syntax zu implementieren. (genau wie die 0b???????? schreibweise) sorry.. bin wohl nicht mehr auf dem aktuellsten stand
Hi du verwechselst da was. Die Diskusion ging um PORTB.1 = 1; ^^ Also dirkte Zuweisung an ein Bit. Das geht mit dem AVRGCC tatsächlich nicht da es kein ANSI-C ist. Zuweisungen an einen ganzen Port sind dagegen kein Problem. Matthias
hi nochmal, hat jemand zufällig nen Mega8 ruliegen, mit dem man den Code austesten könntet? Weiß wirklich nimmer weiter..
hast du das mit den delays schon getestet??? oder mal nen anderen Port?? while(1) { PORTB = 0x00; asm volatile("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" ::); PORTB = 0xFF; asm volatile("nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t" ::); }
Ja, habe am Wochenende noch das mit den Delays und mit dem PORTC getestet... Natürlich kein Erfolg.. :-( Ich habe nach dem Programmieren mal alles aus dem Flash + EEPROM zurückgelesen, steht genau das drinnen, was drin stehen soll!
Nun, also entweder schafft's dein Oszi wirklich nicht, oder dein Chip ist kaputt. Ganz davon abgesehen, Port B, du bist dir sicher, dass du nicht gerade PB3...PB5 benutzt zum Testen? Das sind die Pins für den ISP- Programmer, wenn der noch dran ist, klemmt der u. U. die Signale auf sein Potenzial.
Dein Compiler optimiert for Size (siehe Compilerswitch in Makefile) Der macht vermutlich aus PORTB=0x00; PORTB=0xFF; eine Zeile. Schau dir mal das Assemblerlisting an ! Gruss
Nein. Die Port-Register sind als `volatile' deklariert, alles andere wäre ja auch wirklich unsinnig.
Den ISP Programmer habe ich natürlich abgehängt, und danach einen reset vom AVR gemacht. Ich habe alle PINs vom PORTB durchgemessen, ohne erfolg...
Habe zwei MEGA8 hier aufgebaut, bei beiden gehts nicht.. Werde heute abend mal einen neuen "aus der Schachtel" nehmen, und es nochmal versuchen.. Danke erstmal!
Hallo, wie sieht den der Startup Code vom Compiler aus? Vielleicht fehlen Initialisierungen? Prüf doch mal ob die Pins überhaupt auf Ausgang stehen. (z.B. über einen 4k7 auf einen Pegel legen und messen ob der Pin Strom liefert) Wg. der delay diskussion würde ich einfach den port mit einem Zähler versorgen, dann sollte man ja was sehen können. Robert
Hallo zusammen, eine freudige Nachricht, "es funktioniert" .. Sorry, dass ich eure Zeit vergoldet habe, meine 2 Mega's waren wirklich Defekt.. Da hätte ich auch selber drauf kommen können .. :-( Ich habe dies eigentlich ausgeschlossen, da ich nicht geglaubt habe, dass beide (auf verschiedenen Testboards verbaut) defekt sind. Vorallem, Programmieren usw. hat ja noch geklappt... Naja, wichtig ist, dass es jetzt klappt.. ;-)
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.