hallo zusammen ich bin gerade an den ersten schritten mit avr studio 4 und gcc. als beispiel möchte ich folgenden code testen : #include <avr/io.h> #include <util/delay.h> int main(void) { /* Setzt das Richtungsregister des Ports A auf 0xff (alle Pins als Ausgang): */ DDRA = 0xff; /* Setzt PortA auf 0x00, alle "low": */ PORTA = 0x00; while (1) { PORTA |= (1 << 2); /* setzt Bit 2 an PortA */ _delay_ms(1000); PORTA &= ~(1 << 2); /* loescht Bit 2 an PortA */ _delay_ms(1000); } } allerdings erhalte ich immer build-errors : ../test-gcc.c:10: error: `DDRA' undeclared (first use in this function) ../test-gcc.c:10: error: (Each undeclared identifier is reported only once ../test-gcc.c:10: error: for each function it appears in.) ../test-gcc.c:13: error: `PORTA' undeclared (first use in this function) laut avr-gcc-tutorial ist die io.h einzubinden, da darin DDRA definiert werde. das ist aber nicht der fall.. ? mit der iom48.h geht es auch nicht... kann mir jemand weiter helfen. vielen dank
LOL eine frage, wie kommst du auf PORTA?? Hast du eine Funkverbindung zum PORTA des M48??
und das nächste Problem wird vermutlich das '_delay_ms(1000);' So eine lange Zeit kriegst du nur bei sehr langsamen Takt hin. Die maximale Zeit ist abhänging vom CPU Takt weil nur einfache Warteschleife geflogen wird, gucke mal in die Doku oder das Headerfile, da steht die Formel für die Berechnung drin.
Peter : kopf funktioniert, wieso? porta habe ich aus dem avr-gcc-tutorial... johannes: danke für den hinweis. The maximal possible delay is 262.14 ms / F_CPU in MHz. heisst das 262ms / 10 bei 10 Mhz? wie wird ein einsekunden delay realisiert generell? mit verschachtelten schleifen? danke
> heisst das 262ms / 10 bei 10 Mhz? Genau, also 26,212 ms max. > wie wird ein einsekunden delay realisiert... Einsekunden-Delays macht man einfach nicht! Wenn Du wirklich ne Sekunde warten musst, dann aktivier nen Timer, schick den µC schlafen und lass ihn von nem Timer-Interrupt wieder aufwecken. Wenn Du es aber UNBEDINGT mit Zeitschleifen willst, kannste die natürlich beliebig verschachteln...
um für den ersten Versuch eine LED im Sekundentakt blinken zu sehen ist eine einfache Zeitschleife aber ok, das mit Interrupts zu erledigen wäre vielleicht Übung Nr.2. Also einfach z.B. 50x20ms warten.
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.