Atmega 32, 7-Segment - Programm hängt sich auf?

Gast #3442743
Lesenswert?

Hallo,

ich steige zur Zeit gerade von Bascom auf C um und bin grade an den 
einfachen Sachen dran. Hello World, LED blinken und sowas ist schon 
durch und geht auch.

Just in diesem Moment sitze ich vor einen 7 Segment Anzeige, die an 
meinen Atmega32 an PortA angeschlossen ist.

Was soll ich sagen, sie leuchtet und gibt mir eine "0" aus. Soweit so 
gut, bis hierhin alles bestens. Aber eigetlich soll sie nach 500ms von 
"0" auf "1" umschalten, nur genau das macht sie nicht.

Zuerst habe ich falsche Fuses vermutet, aber nix da. Auch nach 3min 
passiert absolut nix.

Was mache ich denn falsch? Bin ich einfach nur zu doof oder gibts dafür 
eine vernüftige Erklärung.

Verwende AVR Studio 4 und der Quellcode lässt sich sauber ohne Fehler 
durchcompilieren.
F_CPU ist in den Einstellungen des Projekts auf 1MHz gestellt.

Sitzte jetzt schon sein 8 min vor der Null auf der Anzeige, keine 
Reaktion. Ich habe das Gefühl das der Controller mit der _delay_ms nichs 
anfangen kann, ist sowas möglich?

Hier der Quellcode:
1
#include <util/delay.h>
2
#include <avr/io.h>
3

4
int main(void)
5
{
6
  DDRA=0xff;
7

8
  while(1)
9
    {
10
    PORTA=0b11000000;
11
    _delay_ms(500);
12
    PORTA=0b11111001;
13
    }
14
}
Soviel kann man da doch gar nicht falsch machen.

Achja, die Anzeige ist eine mit Common Anode, falls das noch jemanden 
interessiert, aber ich denke das ist eigetlich völlig Wurst.
#3442749
Lesenswert?

Die Reihenfolge in deinem Programm
1
  while(1)
2
    {
3
    PORTA=0b11000000;
4
    _delay_ms(500);
5
    PORTA=0b11111001;
6
    }

ist

* an Port A das Muster für eine 0 ausgeben
* warten
* an Port A das Muster für eine 1 ausgeben
* an Port A das Muster für eine 0 ausgeben
* warten
* an Port A das Muster für eine 1 ausgeben
* an Port A das Muster für eine 0 ausgeben
* warten
....

du musst schon sehr genau schauen, wenn du die '1', die nur für ein paar 
µs leuchtet, sehen willst :-)
1
  while(1)
2
    {
3
    PORTA=0b11000000;
4
    _delay_ms(500);
5
    PORTA=0b11111001;
6
    _delay_ms(500);
7
    }

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