Forum: Mikrocontroller und Digitale Elektronik ATMega16 + PORTA


von Sebastian Schwaiger (Gast)


Lesenswert?

Güß euch.

Folgendes Problem:
Ich will meine Projekte vom ATMega8 auf den 16 upgraden.
Problem:
Mein x16 reagiert nicht auf Befehle a la PORTA=0 (PORTB-D funktionieren)

Ich hab den ADC auch schon abgeschalten (was er ja bei µC reset eigtl. 
eh scho nsein sollte, oder? hilft aber alles nix.

wisst ihr, on man da sonst noch was einstellen muss, bis man PORTA als 
normalen ein/ausgang nutzen kann?

von Karl H. (kbuchegg)


Lesenswert?

Für Port A ist nichts besonderes Softwareseitig notwendig.
Aber: Hast du AVcc beschaltet? Da muss die Versorgungsspannung
rann, auch wenn du den ADC nicht benutzt.

von Sebastian Schwaiger (Gast)


Lesenswert?

hmm... jetz brennt die led, (an PA0 angeschlossen) nicht mehr, aber 
steuern geht immer noch ned...

von Sebastian Schwaiger (Gast)


Lesenswert?

oder sagen wir so:
die led blinkt nicht wie sie sollte!

int main(void)
{
  DDRA=0xFF;

  PORTA=0x0;
  int8_t i=0;
  for(i=0;i<20;i++)
    _delay_ms(5);

  PORTA=0xFF;
  for(i=0;i<20;i++)
  _delay_ms(5);
}

von TT (Gast)


Lesenswert?

die LED kann nicht blinken da das Programm nur einmal durchlaufen wird, 
sprich die LED bleibt für ca 100 ms aus und geht dann an und bleibt 
an....

zum blinken bräuchte man ne Schleife um das Ganze, zb Endlosschleife

von Karl H. (kbuchegg)


Lesenswert?

Sebastian Schwaiger wrote:
> oder sagen wir so:
> die led blinkt nicht wie sie sollte!

Na ja, das ist ja auch kein blinken.
Mehr ein: einmal ein und wieder ausschalten
1
int main(void)
2
{
3
  int8_t i=0;
4
5
  DDRA=0xFF;
6
7
  while( 1 ) { 
8
    PORTA=0x0;
9
    for(i=0;i<20;i++)
10
      _delay_ms(5);
11
 
12
    PORTA=0xFF;
13
    for(i=0;i<20;i++)
14
      _delay_ms(5);
15
  }
16
}

  

von Sebastian Schwaiger (Gast)


Lesenswert?

Tzz... while(1) eingebaut, jetz gehts.
ABER:
eigtl sollte sich der µC doch nach der rückkehr aus main() resetten bzw. 
die main() erneut aufrufen, oder hab ich da mal was falsch 
aufgeschnappt?

von Sebastian Schwaiger (Gast)


Lesenswert?

Na ja, jetz läuft auch mein "eigentliches" Programm (bei dem natürlich 
die Endlosschleife drin ist.)

Vielen Dank euch für die Hilfe!!!

von Karl H. (kbuchegg)


Lesenswert?

Sebastian Schwaiger wrote:
> Tzz... while(1) eingebaut, jetz gehts.
> ABER:
> eigtl sollte sich der µC doch nach der rückkehr aus main() resetten bzw.
> die main() erneut aufrufen, oder hab ich da mal was falsch
> aufgeschnappt?


Was nach der Rückkehr von main() passiert hängt von
deiner Compiler bzw. der Laufzeitumgebung ab, die der
bereitstellt.
Beim WinAVR wird das Programm in einer Endlosschleife
gefangen und nichts passiert mehr.

Aber: Darauf verlässt man sich nicht. Grundsätzlich:
Auf einem µC programmiert man so, dass das Programm aus
main() nie wieder heraus kommt.

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.