Hallo , ich bin in den Anfängen brauche die einfachsten Ünterstüzungen. Mein Problem: Ich lade aus dem Programm Myavr "LED on" und brenne in das Microcontroller ATmega8 in C. Es funktioniert nicht. Hier das Programm: //---------------------------------------------------------------------- // Titel : myAVR Beispiel "LED an" für den ATmega8/48/88/168 //---------------------------------------------------------------------- // Funktion : Schaltet alle 3 LEDs an // Schaltung : PortB.0-2 an LEDs //---------------------------------------------------------------------- // Prozessor : // Takt : 3.6864 MHz // Sprache : C // Datum : 02.12.2005 // Version : 1.3 // Autor : Dipl. Ing. Päd. Alexander Huwaldt // Programmer : ... // Port : ... //---------------------------------------------------------------------- #define F_CPU 3686400 // Taktfrequenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen //---------------------------------------------------------------------- main () { DDRB=0xFF; //PortB auf Ausgang konfigurieren do { PORTB=0xFF; // PortB High, LEDs on } while (true); // Mainloop } //---------------------------------------------------------------------- In Assembler funktioniert das ganze einwandfrei. Danke Dursun
:
Verschoben durch User
Blöde frage: compilierst du es auch? Wenn ja kannst du doch einfach mal den ASM code vergleichen.
Ja ich compiliere. Was sind ASM code und vergleich man sie? Danke Dursun
ElTio schrieb: > Ich wusste gar nicht, dass ein "true" gibt... :-/ Ich auch nicht. Versuchs mal mit 0 anstatt true.
Das Programm macht doch keinen Sinn. Da werden doch nur die Ports High gesetzt, warum wird das in einer Schleife dauernd ausgeführt? Dann das "true" ist wirklich komisch. Ersetze durch "1". Wie testest du obs funktioniert? Was erwartest du? gruß cyblord
Jetzt ist mein C Wissen am Ende, aber wie wärs mit
1 | while(1){ |
2 | |
3 | }
|
anstatt
1 | while(1); |
2 | }
|
Bin ich mir nicht sicher, könnte aber sein.
Peter K. schrieb: > Auserdem eventuel anstatt main() >
1 | > ... |
2 | > int main(void){ |
3 | > ... |
4 | > } |
5 | > ... |
6 | >
|
Quatsch. Aber sagt mal, wenn das Programm copy&paste ist, programmiert man dann so als Dipl. Ing. ? duck und weg
1 | main () |
2 | {
|
3 | |
4 | DDRB=0xFF; //PortB auf Ausgang konfigurieren |
5 | PORTB=0xFF; // PortB High, LEDs on |
6 | |
7 | while (1){ |
8 | }
|
9 | }
|
lol... Was mache ich denn da? Meine Bauch ist voll und mein Kopf müde.. ich lass es lieber! ;-)
cyblord ---- schrieb: > Peter K. schrieb: >> Auserdem eventuel anstatt main() >>
1 | >> ... |
2 | >> int main(void){ |
3 | >> ... |
4 | >> } |
5 | >> ... |
6 | >>
|
> > Quatsch. > > Aber sagt mal, wenn das Programm copy&paste ist, programmiert man dann > so als Dipl. Ing. ? *duck und weg* Kein Quatsch, ich habe einen bekannten von Atmel und der hat mir das so beigebracht.
ich möche erstmal nur die Ausänge von PortB auf Ausgang konfigurieren und die LEDs on und mehr nicht. Ich habe alle Vorschläge umgesetzt.Leider funktioniert nicht. Danke dursun .
Was heißt "funktioniert nicht"? Und wie genau sieht Deine Schaltung aus? Wie genau sieht Dein Sourcecode jetzt aus?
Nochmal gesamt:
1 | #include <avr/io.h
|
2 | |
3 | int main(void){ |
4 | DDRB = 0xFF; |
5 | PORTB = 0xFF; |
6 | while(1){ |
7 | |
8 | }
|
9 | return 1; //Wird nie erreicht |
10 | }
|
Kann sein. Aber 1. Mit welchen Programm codest du? 2. Benutzt du das MyAVRProgTool -> Dann richtiges Board mit µC eingestellt??
Die Schaltung ist orginal von ATmega8-Board und der aktuelle Sourcecode: #include <avr/io.h int main(void){ DDRB = 0xFF; PORTB = 0xFF; while(1){ } return 1; //Wird nie erreicht }
Ich fände es hilfreich wenn du einmal gesammelt deine Informationen postest: - kompletter Quellcode - Toolchain - Einstellungen der Tools
// Funktion : Schaltet alle 3 LEDs an // Schaltung : PortB.0-2 an LEDs Macht es das nicht? Das Programm sollte funktionieren, wenn die Hardware dazu passt. Ciao, Yagan
Peter K. schrieb: > Nochmal gesamt: > >
1 | > #include <avr/io.h |
2 | >
|
3 | > int main(void){ |
4 | > DDRB = 0xFF; |
5 | > PORTB = 0xFF; |
6 | > while(1){ |
7 | >
|
8 | > } |
9 | > return 1; //Wird nie erreicht |
10 | > } |
11 | >
|
Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0, das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht wird. return 1 wäre ein Fehler. gruß cyblord
Warum ignorierst du alle Lösungsvorschläge und gehst weiter auf dein Programm ein? Das funktioniert nicht, das ist halt falsch und wieso, wurde hier bereits erwähnt. (true ist zum Beispiel ist dort nirgends definiert). Probiere doch mal die anderen vorgeschlagenen Programme und schau dir C-Tutorials an.
> Ans Ende gehört ein return 0, > das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht > wird. return 1 wäre ein Fehler. Ja, ok. Das ist jetzt aber erst mal nicht mehr relevant. Wird dieses Pgm für einen Mega8 compiliert, gelinkt und aufs Board gebrannt, müssen die Pins am PORTB alle auf 1 gehen.
Trotzdem wäre ein Blink-Programm fürs testen besser. Wenn die LED nach VCC geschaltet ist, sieht er nix. Ein Blinken wäre eindeutig.
Das myAVR Workpad mit Board light. Wo kann ich schauen ob es richtig eingestellt?
cyblord ---- schrieb: > Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0, > das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht > wird. return 1 wäre ein Fehler. > > gruß cyblord Aha, gruess mal meinen Bekannten von Atmel - das ist ein Originalquelltext von ihm.
Peter K. schrieb: > cyblord ---- schrieb: >> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0, >> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht >> wird. return 1 wäre ein Fehler. >> >> gruß cyblord > > Aha, gruess mal meinen Bekannten von Atmel - das ist ein > Originalquelltext von ihm. Falsch bleibt falsch. Und wenn es der Papst geschrieben hätte.
cyblord ---- schrieb: > Peter K. schrieb: >> cyblord ---- schrieb: >>> Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0, >>> das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht >>> wird. return 1 wäre ein Fehler. >>> >>> gruß cyblord >> >> Aha, gruess mal meinen Bekannten von Atmel - das ist ein >> Originalquelltext von ihm. > > Falsch bleibt falsch. Und wenn es der Papst geschrieben hätte. Ist jetzt auch egal.
nochmal ich habe alle Vorschläge 1:1 übernommen und compiliert auf dem Board.
cyblord ---- schrieb: > Ja man sieht schon du bist der Checker. Ans Ende gehört ein return 0, > das signalisiert ein Beenden ohne Fehler. Auch wenn das nie erreicht > wird. return 1 wäre ein Fehler. Das ist hier vollkommen irrelevant. Und der Laufzeitumgebung auf dem AVR ist das auch noch vollkommen wurscht. Interessant ist die Schaltung, d.h. wie die LEDs mit den Portleitungen von PortB verbunden sind.
Hier ist das Datenblatt - zumindest sagt Conrad das http://www.produktinfo.conrad.com/datenblaetter/175000-199999/191387-an-02-ml-MYAVR_BOARDLIGHT_de_en.pdf
cyblord ---- schrieb: > Trotzdem wäre ein Blink-Programm fürs testen besser. Wenn die LED nach > VCC geschaltet ist, sieht er nix. Ein Blinken wäre eindeutig. Dann soll ers so machen.
1 | #include <avr/io.h
|
2 | |
3 | int main(void){ |
4 | DDRB = 0xFF; |
5 | PORTB = 0x55; |
6 | while(1){ |
7 | }
|
8 | }
|
Anstelle von 0x55 kann man auch 0xAA benutzen. Damit brennt auf jeden Fall jede 2.te LED (wenn man mal die naheliegende Annahme treffen kann, dass alle LEDs gleich verschaltet sind)
Das Problem wird auch nicht am Programm liegen. Entweder das Kompilieren klappt nicht, oder das brennen oder die Verschaltung stimmt nicht. Dazu kommen noch die Fuses. Wer weiß das schon. Alles sehr wirr und vom TE kommt auch nix sinnvolles.
Das Orginalprogramm von Atmel in Assembler funktionert einwandfrei. Die LED's sind auch einwandfrei. Das Orginal-und Vorgeschlagenenrprogramme funktionieren in C nicht.
Dursun Göyünc schrieb: > Das Orginalprogramm von Atmel in Assembler funktionert einwandfrei. > Die LED's sind auch einwandfrei. > Das Orginal-und Vorgeschlagenenrprogramme funktionieren in C nicht. Wird denn wirklich ohne Fehler kompiliert? Brennst du die korrekte HEX Datei? Geht das Brennen ohne Fehler?
Dursun Göyünc schrieb: > Das Orginalprogramm von Atmel in Assembler funktionert einwandfrei. Welche Ports werden denn im Assemblerprogramm benutzt? Sind es vielleicht andere als im C-Programm?
so sieht jetzt das Programm aus: //---------------------------------------------------------------------- // Titel : myAVR Beispiel "LED an" für den ATmega8/48/88/168 //---------------------------------------------------------------------- // Funktion : Schaltet alle 3 LEDs an // Schaltung : PortB.0-2 an LEDs //---------------------------------------------------------------------- // Prozessor : // Takt : 3.6864 MHz // Sprache : C // Datum : 02.12.2005 // Version : 1.3 // Autor : Dipl. Ing. Päd. Alexander Huwaldt // Programmer : ... // Port : ... //---------------------------------------------------------------------- #define F_CPU 3686400 // Taktfrequenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen //---------------------------------------------------------------------- #include <avr/io.h int main(void) { DDRB = 0xFF; PORTB = 0x55; while(1){ } }
hier das Programm in Assembler: ;---------------------------------------------------------------------- ; Titel : myAVR Beispiel "LED an" für den ATmega8 ;---------------------------------------------------------------------- ; Funktion : eine LED wir angeschalten ; Schaltung : PORTB.0=LED1 ;---------------------------------------------------------------------- ; Prozessor : ATmega8 ; Takt : 3,6864 MHz ; Sprache : Assembler ; Datum : 09.11.2007 ; Version : 1.0 ; Autor : Stephan Hänsel ; Programmer : ; Port : ;---------------------------------------------------------------------- .equ F_CPU, 3686400 .include "AVR.H" ;----------------------------------------------------------------------- - ;Reset and Interruptvectoren ;VNr. Beschreibung begin: rjmp main ; 1 POWER ON RESET reti ; 2 Int0-Interrupt reti ; 3 Int1-Interrupt reti ; 4 TC2 Compare Match reti ; 5 TC2 Overflow reti ; 6 TC1 Capture reti ; 7 TC1 Compare Match A reti ; 8 TC1 Compare Match B reti ; 9 TC1 Overflow reti ;10 TC0 Overflow reti ;11 SPI, STC Serial Transfer Complete reti ;12 UART Rx Complete reti ;13 UART Data Register Empty reti ;14 UART Tx Complete reti ;15 ADC Conversion Complete reti ;16 EEPROM Ready reti ;17 Analog Comperator reti ;18 TWI (I²C) Serial Interface reti ;19 Strore Program Memory Ready ;----------------------------------------------------------------------- - ;Start, Power ON, Reset main: ldi r16,lo8(RAMEND) out ioSPL,r16 ldi r16,hi8(RAMEND) out ioSPH,r16 ;init Stack sbi ioDDRB,0 ;----------------------------------------------------------------------- - mainloop: wdr ldi r16,0b00000001 ;LED ON out ioPORTB,r16 rjmp mainloop ;----------------------------------------------------------------------- -
im Assemblerprogramm wird aber nur eine LED eingeschaltet..... > ; Funktion : eine LED wir angeschalten ist klar....
cyblord ---- schrieb: > Falsch bleibt falsch. Und wenn es der Papst geschrieben hätte. Seit wann kann ein Sozi kodieren? Dann schon lieber der Kumpel von Atmel :-9
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.