ist das dein gesamter code ? oder nur n ausschnitt ?
Hallo,
ich habe mir mal die Registerprogrammierung angeschaut und wollte mal gleich mit ihr die Status LED grün schalten:
Aslo habe ich folgenden code verwendet:
Nun zeigt mein Compiler allerdings eine Fehlermeldung an:Code:{ DDRD |= (1<<PD0) PORTD |= (1<<PB0) }
[size=9]-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c:1: error: parse error before '{' token
make: *** [test.o] Error 1
> Process Exit Code: 2
Ich weiß nicht was ich machen soll, was mache ich falsch?
Bitte um schnelel Antworten,
Hans [/quote]
ist das dein gesamter code ? oder nur n ausschnitt ?
ne das ist mein gesamter code
fehlt da was?, habe ich was vergessen?
autsch >_< da fehlen wohl die C-Grundlagen ...
schau dir die beispiel codes bitte an
ein grundgerüst ist z.B.
EDIT: sorry das einrücken iss bissl schief gegangen ich hoffe es geht so besserCode:#include "asuro_prog.h" // lädt die bibliothek für die befehle int main(void) //der einsprungpunkt ist immer die main-methode { Init(); // initialisieren des prozessor // hier kannst du variablen initialisieren und auch // lichter die dauerhaft an sein sollen (dein code z.B.) while(1){ // hier wird permanent eine schleife durchlaufen // hier fragst du z.B. regelmäßig die taster ab und reagierst } return 0; // das ist nur obligatorisch ... dein asuro sollte NIE // aus der schleife kommen, dann ist sein zustand undefiniert }
Hallo
Ein komplettes Programm sieht etwa so aus:
Und noch meine ersten Versuche, eine Tastenabfrage:Code:#include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRB=0; // nicht benoetigte Ports auf Eingang setzen DDRC=0; DDRD=0b00000100; //rote StatusLED haengt an PD2(= Port D, Bit2) PORTD=0b00000100; // Ausgang setzen while(1); return(0); }
..und noch eine Einschaltverzögerung:Code:#include <avr/io.h> #include <avr/interrupt.h> int main(void) { unsigned int i,j; for (i=0; i < 20; i++) { for (j=0; j < 65535; j++); } DDRB=0; // nicht benoetigte Ports auf Eingang setzen DDRC=0; DDRD=0b00000100; //rote StatusLED haengt an PD2(= Port D, Bit2) PORTD=0b00000100; while(1) { /* Die Tasten haengen an PortC Bit4. Wenn keine Taste gedrueckt ist, wird ueber R23 VCC an diesen Pin gelegt. Das ergibt eine 1 beim Einlesen. Wenn man dann eine Taste drueckt, ergibt sich ein Spannungsteiler, bei dem der Pin dann deutlich, bei K6 1000K zu 68K, nach 0V gezogen wird. Das ergibt eine 0 am Eingang. Den C7 kann man ignorieren, R24 ebenfalls, weil PD3 als Eingang (ohne Pullup?) geschaltet ist. */ if (PINC & 0b00010000) // PortC Bit4 ist der Tasteneingang { PORTD=0b00000100; // StatusLED rot setzen } else { PORTD=0b00000000; // StatusLED ausschalten } /* Spätestens jetzt wird auch mir klar, dass die Bitschieberei effektiver ist: PORTD=((PINC & (1<<PC4)) >> 2); */ } return(0); }Dann wurde mein RP6 geliefert und der asuro eingemottet...Code:#include <avr/io.h> #include <avr/interrupt.h> unsigned int timer_startwert=65536-7812; // 8MHz/1024=7812,5 int main(void) { DDRB=0; // nicht benoetigte Ports auf Eingang setzen PORTB=0; // und die Pullups aus, sonst "glimmt" die StatusLED gruen DDRC=0; PORTC=0; DDRD=(1 << PD2); //rote StatusLED haengt an PD2(= Port D, Bit2) DDRD|=(1 << PD7); // Kathoden der BackLEDs haengen auf PD7 PORTD=(1 << PD7); // high an PD7 schaltet die BackLEDs aus /* Es folgt eine Einschaltverzögerung von ca. 1 Sekunde */ TCNT1=timer_startwert; // 16-Bit auf einmal laden? TCCR1B |= 0b00000101; // Prescaller Timer1 auf 1024 setzen while(!(TIFR & (1 <<TOV1) )); //Warten bis Überlauf Timer1 TCCR1B &= ~0b00000101; // Prescaller löschen bedeutet Timer1 stoppen TIFR = (1 << TOV1); // Flag setzen bedeutet Flag wieder löschen while(1) PORTD=(1 << PD7) | ((PINC & (1<<PC4)) >> 2); // eine Taste schaltet StatusLED aus return(0); }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
ja sry ich hab gedacht das er den asuro weiterhin mit normalen befehlen füttern will
Hallo,
also erstmal dne ASURO mit vorgefertigten Funktionen zu füttern, das kann ich schon
nun zum eig thema:
wenn ich nun deinen programm code compiliere, dann kommt folgende fehlermeldung,
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c:8:9: invalid suffix "b00000100" on integer constant
test.c:9:10: invalid suffix "b00000100" on integer constant
make: *** [test.o] Error 1
> Process Exit Code: 2
woran könnte das liegen?
Hallo
Das liegt an avr-gcc, das kann manchmal keine binären Zahlen. Du kannst 0b00000100 durch (1<<2) oder 4 ersetzen. ( und 0b00010000 durch 16)
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
also sähe dann mein programm wie folgt aus:
oder, etwa nicht?Code:#include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRB=0; // nicht benoetigte Ports auf Eingang setzen DDRC=0; DDRD=4; //rote StatusLED haengt an PD2(= Port D, Bit2) PORTD=4; // Ausgang setzen while(1); return(0); }
Lesezeichen