Forum: Compiler & IDEs Verstehe Code des AVR Studio nicht


von RobiWurm (Gast)


Lesenswert?

Hallo,

ich arbeite mit dem Atmel Studio 7 und will ein Programm für einen 
ATtiny13a erstellen. Ich versteh aber nicht so ganz was das Studio mit 
meinem Code macht.

Er sollte mit der LED am PORTB3 blinken. Ich kann aber mit dem Scope 
nicht erkennen das der Ausgang etwas macht. Hat einer eine Idee was 
falsch sein könnte?

Hier der Code:

#include <avr/io.h>
#include <avr/interrupt.h>

#define LED0    PORTB4
#define LED1    PORTB3

uint8_t Tick         = 0;
uint8_t OldTick      = 0;

void InitSystem ( void )
{
  //Set IOs to Output
  DDRB = ((1 << LED0) | (1 << LED1));

  // Timer 0 konfigurieren
  TCCR0B = (1<<CS01);    // Prescaler 8
  TIMSK0 |= (1<<TOIE0);  // Overflow Interrupt erlauben
  sei();                 // Global Interrupts aktivieren
}

static void MainLoop (void) __attribute__((noreturn));
void MainLoop (void)
{
  while (1)
  {

    ////Next Tick
    if (OldTick != Tick)
    {
      OldTick = Tick;
    PORTB |=  (1 << LED1);
    PORTB &= ~(1 << LED1);
    }
  }
}


int main(void)
{
  InitSystem();
  MainLoop();
  return(0);
}

ISR(TIM0_OVF_vect)
{
  Tick++;
}

von Peter II (Gast)


Lesenswert?

RobiWurm schrieb:
> Hat einer eine Idee was
> falsch sein könnte?

ja, Tick ist nicht volatile - er optimiert deine Abfrage weg.

von Tom (Gast)


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

RobiWurm schrieb:
> PORTB |=  (1 << LED1);
> PORTB &= ~(1 << LED1);

Wieviel Zeit vergeht zwischen diesen beiden Befehlen?
Für jeden Tick wird die LED nur sehr kurz ihren Zustand ändern, um dann 
wieder in den Ausgangszustand zu verfallen.

Je nachdem, wie Du die LEDs angeschlossen hast, werden sie nur sehr kurz 
(im einstelligen µs-Bereich oder darunter) aufblitzen und ansonsten aus 
sein, oder dauerhaft leuchten und nur sehr kurz ausgehen.

von RobiWurm (Gast)


Lesenswert?

Peter II schrieb:
> ja, Tick ist nicht volatile - er optimiert deine Abfrage weg.

Für heute bist du mein Held! Danke Danke Danke.......

von RobiWurm (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Je nachdem, wie Du die LEDs angeschlossen hast, werden sie nur sehr kurz
> aufblitzen

Das stimmt, die LED sieht man nicht leuchten aber ich habe ein Scope 
verwendet und das hätte etwas anzeigen müssen.

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.