io.h falsch?

Gast #345560
Lesenswert?

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
Gast #345566
Lesenswert?

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.
Gast #345567
Lesenswert?

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
Gast #345568
Lesenswert?

> 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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren