Forum: Mikrocontroller und Digitale Elektronik ATMega16 schaltet keine Pins


von Miche (Gast)


Lesenswert?

Hi, ich habe folgendes, mir unerklärliches Problem:
ich wollte ein Programm für eine Uhr auf den Controller überspielen. 
Dies klappte auch problemlos allerdings schaltete der Controller keinen 
seiner Ausgänge.
Daraufhin habe ich das Programm so weit vereinfacht, bis folgendes 
herausgekommen ist:
1
#include <avr/io.h>
2
  
3
int main(void)
4
{
5
    DDRA = 0xff;    
6
    PORTA = 0xff;   
7
    return 0;
8
}
Allerdings zeigt sich der Controller relativ wenig beeindruckt.
Meine Beschaltung:
Takt: 4Mhz extern Quarz
Versorgungsspannung an VCC, AVCC und AREF
GND an beiden GND anschlüssen
100nF zwischen vcc und GND
10k zwischen VCC und Reset
und natürlich ne LED für die Portpins.

Hat irgendjemand eine Idee, was ich Versuchen könnte?
Danke.

MfG Miche

von cskulkw (Gast)


Lesenswert?

Hi Miche,

wenn die LEDs als Pull-down geschaltet sein sollten. Also Anode an +Ub 
und Kathode über R an µP-Pin geschalte, dann bleiben die LEDs dunkel. Du 
muß PORTA = 0x00 programmieren. Dann sollten sie leuchten.

Viel Erfolg

von Miche (Gast)


Lesenswert?

Danke für die schnelle Antwort, leider ändert sich nichts und die LED 
bleibt aus (LED funktioniert, habs getestet) :-(

von Oliver (Gast)


Lesenswert?

Miche schrieb:
> ich wollte ein Programm für eine Uhr auf den Controller überspielen.
> Dies klappte auch problemlos allerdings

Das verify nach dem Flashen liefert keine Fehler?

Miche schrieb:
> Takt: 4Mhz extern Quarz

Wie hast du denn die Fuses gesetzt?

Anonsten ist ein ausgeführtes return in main nicht sonderlich klasse, in 
diesem Fall aber stört das nicht.

Oliver

von Timmo H. (masterfx)


Lesenswert?

Dein Controller fängt immer wieder von vorne an.
Versuch mal ihn nach den Befehlen idlen zu lassen:
1
#include <avr/io.h>
2
  
3
int main(void)
4
{
5
    DDRA = 0xff;    
6
    PORTA = 0xff;   
7
    while(1);
8
    return 0;
9
}

Die Beschaltung der LEDs (also Polung+Vorwiderstand) ist natürlich auch 
wichtig... R's hast du ja wohl drin für die LEDs?

von Miche (Gast)


Lesenswert?

verify liefert keinen Fehler, hab nur den Clock auf externes quarz 
gesetzt.
Mit neuem Controller und Werkseinstellung funktioniert es aber auch 
nicht.
Auch das eingefügte while(1); bringt keine Besserung.
Hatte ich zuvor auch im Programm aber der Controller müsste nach meinem 
Verständnis nach die zustände auch ohne while(1); behalten oder?
Rs sind vorhanden und LEDs sind richtig gepolt.
langes bein an VCC, kurzes bein an R und zweites bein von R an AVR PIN 
A2

von Timmo H. (masterfx)


Lesenswert?

Miche schrieb:

> Rs sind vorhanden und LEDs sind richtig gepolt.
> langes bein an VCC, kurzes bein an R und zweites bein von R an AVR PIN
> A2
Also doch anders rum. Mit der beschaltung musst du die Ports auf 0x00 
schalten, dann sollten sie leuchten.

langes Bein => Anode
kurzes Bein => Kathode

Da an der Anode bereits VCC anliegt muss an der Kathode 0V == GND liegen 
damit sie leuchten.

von Miche (Gast)


Lesenswert?

hab das cskulkw s beitrag das Programm auf 0x00 geändert und Die LEDs 
andersherum eingebaut, zuvor war es entgegengesetzt

von Peter II (Gast)


Lesenswert?

Timmo H. schrieb:
> Dein Controller fängt immer wieder von vorne an.
> Versuch mal ihn nach den Befehlen idlen zu lassen:

nein macht er nicht, nach der main kommt die endlosschleife in der libc

von Timmo H. (masterfx)


Lesenswert?

Echt? Vor ein paar Jahren ist mein µC dann wieder von vorne losgerannt!? 
Glaub ich zumindest....

von Miche (Gast)


Lesenswert?

Ich habe nun den Fehler denke ich eingrenzen können:
habe den Controller nun mit meinem Netbook programmiert -> funktioniert
werde in nächster Zeit mal winavr und avrstudio neuinstallieren
Danke für die schnelle Hilfe
MfG Miche

von Timmo H. (masterfx)


Lesenswert?

Bevor du neu installierst... vielleicht hast du im Programmierdialog 
auch noch ein falsches Hex-File drin. AVRStudio merkt sich nämlich immer 
das letzte File und nimmt nicht automatisch das vom aktuellen Projekt... 
bin ich auch schon öfter drauf reingefallen :D

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.