Forum: Mikrocontroller und Digitale Elektronik _Delay_us() geht nur teilweise!


von Georg B. (Firma: Devel Solutions) (shorsh)


Lesenswert?

hallo leude,

folgender code:

uint16_t start_conv(uint8_t muxchannel)
{

  uint16_t conv_data;

  if(muxchannel == 1)
  {
    PORTA &= ~(1<<PA2);
    PORTA &= ~(1<<PA3);

  }
  if(muxchannel == 2)
  {
    PORTA = (1<<PA2);
    PORTA &= ~(1<<PA3);

  }
  if(muxchannel == 3)
  {
    PORTA &= ~(1<<PA2);
    PORTA = (1<<PA3);

  }

  _delay_us(8);
...............................]

Die Routine wird 3mal hintereinander aufgerufen und das delay 
funktioniert genau einmal und bei den bei 2 darauffolgenden aufrufen, 
geht es nicht!
Woran zur hölle kann das bitte liegen. Interrupts ausgeschaltet bringt 
an dieser stelle auch nix.

ciao
georg

von Falk B. (falk)


Lesenswert?

@ Georg Bauerfeind (Firma igus-its) (shorsh)

>Die Routine wird 3mal hintereinander aufgerufen und das delay
>funktioniert genau einmal und bei den bei 2 darauffolgenden aufrufen,
>geht es nicht!

Das Problem liegt sicher woanders. Optimierung eingeschaltet (-O2, -O3 
oder -Os) ?

MFG
Falk

von Georg B. (Firma: Devel Solutions) (shorsh)


Lesenswert?

thx,
daran lags nicht, die delay funktioniert, war nur ein fehler i.d. 
testroutine.... ;)

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
Noch kein Account? Hier anmelden.