Forum: Mikrocontroller und Digitale Elektronik Atmega 32, 7-Segment - Programm hängt sich auf?


von Paul (Gast)


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.

: Bearbeitet durch User
von Karl H. (kbuchegg)


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
    }

: Bearbeitet durch User
von Paul (Gast)


Lesenswert?

Ahhhh, verdammt. So ein dummer Fehler.

Tut mir leid für diese dumme Frage und vielen Dank für die schnelle 
Hilfe, jetzt klappts.

Den Fehler mache ich sicher nicht nochmal :)

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.