Bei dieser Frage bin ich für jede Vermutung und Mutmaßung dankbar da es eigentlich nicht erklärbar ist. (jedenfalls nicht für mich) Folgendes: Wenn ich folgende Zeilen: P_ENABLE = LOW; P_CHIP1 = HIGH; P_CHIP2 = HIGH; P_DI = HIGH; P_RW = LOW; P_ENABLE = HIGH; DATA =0x55; P_ENABLE = LOW; in meiner main-schleife ausführe funktioniert sie und ich erhalte linien auf meinem Graphiksisplay. Packe ich das ganze jedoch in eine Funktion und rufe diese auf kann ich dem Display zusehen wie es erst einen Punkt zeichnet, dan eine Lücke, ein Punkt usw. Ich verstehe das nicht. Timing? Villeicht hat jemand eine Idee. Der gesammten Code ist im Anhang. Danke!
sorry, hatte den code zwar noch ein wenig kommentiert aber nicht gespeichert. Also nochmal.
OK, ich habe weitergeforscht und für mich wird es immer seltsamer. Habe den code bis auf das nötigste gekürzt und mit dem oszi gemessen. Bei diesem Programm: #include <mega128.h> void main(void) { PORTB=0xFF; DDRB=0xFF; while (1) { PORTB.0 =1; PORTB.0 =0; }; } Messe Ich ein High Signal von 2µs und Low von 4µs periodisch . Das Scheint in Ordnung zu sein. Nun aber kommt das seltsame. Bei diesem Programm: #include <mega128.h> void port(void) { PORTB.0 =1; PORTB.0 =0; } void main(void) { PORTB=0xFF; DDRB=0xFF; while (1) { port(); }; } messe ich ein periodisches signal mit einer Pulszeit von 7µs und einer Pulspause von 25ms!!! fünfundzwanzig milisekunden! Kann sich das jemand erklären? Ich nicht. Ich zweifle an meinem Verstand. Bitte um Hilfe!
kommt mir so vor, als hättest du da eine schlechte Schwarzkopie am Laufen?? Könnte das sein?
Eine Schwarzkopie von CodeVision? Ne das ist ne Professional Lizenz meiner Techniker Schule. Und bissher hat mich der Compiler auch nicht im Stich gelassen. Bei dem ATMega16 habe ich keine Probleme. Gab es so ein Problem den schonmal?
genau deine Symptome passieren, wenn du 2 Instanzen von CV startest, dann von einem laufendem die Lizenz exportiertst. Scheinbar hat man dann 2 Lizenzen, aber nur scheinbar...
Hm, ich bin vor einigen Tagen von Windows ME auf XP umgestiegen, habe also auch CV neu instaliert. Die lizenz Datei hatte ich auf der Festplatte gespeichert und habe sie ganz normal von dort importiert. Kann man dabei etwas Falsch machen? Wie gesagt, beim ATMega16 und mit meinem alten Betriebssystem hatte ich nie Probleme. Was kann ich nun tun? Genügt eine Deinstalation und erneute Installation um das Problem zu beseiteigen? Und was ist mit den bissher geschrieben Projekten, sind die nun irgendwie "Gebrandmarkt" ?
den Projekten passiert meiner Meinung nach nichts, wie auch? Hast du denn die Originalinstallation auf dem ME-System noch?
Hi wie wärs wenn du dir einfach mal den ASM-Output des Compilers anschaust? Falls der Compiler sowas nicht anbietet bleibt dir immer noch der Weg über einen Disassembler (z.B. den des AVR Studio) Matthias
den Projekten passiert meiner Meinung nach nichts, wie auch? -Bei den Eagle Dateien ist es so das man mit gecrackten Versionen erstellte Dateien auch nicht mit legalen Versionen öffnen kann. Hast du denn die Originalinstallation auf dem ME-System noch? -Nein, Festplatte formatiert, ich habe nur noch die Lizenz datei. Habe jetzt berreits 2 mal ne Neuinstallation Versucht. Hat nix gebracht.
na ja - ein eagle-file mit einem C-file zu vergleichen ist wie Äpfel und Birnen... C-Sourcen sind reine Textdateien, da passiert nichts. Schreib Pavel Haiduc ne mail, schildere, was genau du gemacht hast, auch wer Lizenznehmer ist, wird sich schon ne Lösung finden.
Mit dem C-File haste recht aber ich dachte auch an das Projecktfile .prj und in der sind schon Programmspezifische informationen drin. Aber ok, es würde wirklich keinen sinn machen den das könnte mann leicht umgehen. Das mit der mail werde ich mal machen. @Matthias, danke für den Tip. ich habe mir die assembler files angekuckt, jedoch nichts auffälliges gefunden. Hier das asm ohne Funktionsaufruf: .ORG 0x500 ; 1 ; 2 ; 3 ; 4 ; 5 #include <mega128.h> ; 6 ; 7 ; 8 ; 9 void main(void) ; 10 { .CSEG _main: ; 11 ; 12 PORTB=0xFF; LDI R30,LOW(255) OUT 0x18,R30 ; 13 DDRB=0xFF; OUT 0x17,R30 ; 14 ; 15 while (1) _0x2: ; 16 { ; 17 PORTB.0 =1; SBI 0x18,0 ; 18 PORTB.0 =0; CBI 0x18,0 ; 19 }; RJMP _0x2 ; 20 } _0x5: RJMP _0x5 und hier mit Funktionsaufruf: .ORG 0x500 ; 1 ; 2 ; 3 ; 4 ; 5 #include <mega128.h> ; 6 ; 7 void port(void) ; 8 { .CSEG _port: ; 9 PORTB.0 =1; SBI 0x18,0 ; 10 PORTB.0 =0; CBI 0x18,0 ; 11 } RET ; 12 ; 13 void main(void) ; 14 { _main: ; 15 ; 16 PORTB=0xFF; LDI R30,LOW(255) OUT 0x18,R30 ; 17 DDRB=0xFF; OUT 0x17,R30 ; 18 ; 19 while (1) _0x3: ; 20 { ; 21 port(); RCALL _port ; 22 }; RJMP _0x3 ; 23 } _0x6: RJMP _0x6 Also wenn der Compiler tatsächlich was gemeines macht dan ist es hier nicht ersichtlich, oder habe ich etwas übersehen?
Hi und wo ist der Rest(INT-Vektoren, Init, usw.)? Da dein ASM-Output ein ORG 0x500 enthält muß das Programm ja irgendwie da hin kommen. Häng doch mal die zwei HEX-Dateien an die der Compiler erzeugt. Matthias
@Matthias: Hab ich weggelassen- sorry. Hab nun das ganze file angehängt. Diese File ist mit Funktionsaufruf. Das ohne hänge ich im nächsten Post noch an. @crazy horse: Ich habe mir heute morgen die mühe gemacht auf einer neuen Partition nochmals windows XP zu installieren und habe dort das ganze mit der neusten Evaluation version von CV gestetet. Genau das gleiche Problem. Ich halte es daher für unwarscheinlich das es an einer ungültigen Lizenz liegt!?
Hi ich wollte das eingentlich durch den Simulator schicken. Da fehlen aber noch irgendwelche Include-Files um das Ganze durch den Assembler zu bringen. Schick doch einfach die HEX-Dateien. Matthias
Das mit dem simulieren ist ne gute idee, habe ich auch grade selbst noch gemacht. Im Simulator arbeitet das Programm prima. Langsam verzweifle ich echt. Eigentlich ist in der Theorie alles in Ordung und es sollte Fuktionieren aber was ich auf dem Oszi messe ist nunmal auch Tatsache. Was auch noch interesannt ist, das Problem habe ich erst seit ich den ATMega128 verwende. Ich habe eben nochmal das Programm mit dem ATMega16 getestet und nichts auffälliges gefunden. Ein hardware defeckt ist aber auch unwarscheinlich. Habe es mit 2 unterschiedlichem Mega128 getestet. Wers nicht glauben kann, den kann ich gut verstehen. Auf wunsch geb ich meine Adresse raus, dann könnt ihr euch das selbst ankucken :)
Hi ja dann. M103C-Fuse im Mega128 gesetzt. Dann krachts beim Rücksprung aus der Funktion. Hätte ich auch gleich drauf kommen können. Matthias
BRRRRR, nein oder? So eine verdammte Fuse kostet mich 2 tage hartes grübeln und zweifeln??? Danke Matthias, nun gehts tatsächlich! Ist die fuse standartmäsig gesetzt und was bewirkt sie genau? Nochmal vielen Dank, du hast meine Woche gerettet! :D
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.