Forum: Mikrocontroller und Digitale Elektronik attiny2313a PORTA probleme


von Kalle (Gast)


Lesenswert?

Hallo Forengemeinde
ich bin dabei mal wieder etwas mit dem 2313a zu machen nur leider 
scheitere ich gleich bei der leichtesten übung :| . wie gewohnt habe ich 
meinem projekt zwei leds spendiert und jetzt bekomme ich die beiden 
nicht zum laufen. sie hängen an den pins a0 und a1 sind lc leds(2mA) und 
sollten richtig angeschlossen sein ( vorwiderstand) .
das problem : die leds blinken bei folgendem code mit einer frequenz von 
ca. 10hz :o.
mein ansatz: hat das vielleicht damit zutun,dass diese pins auch für 
XTAL nutzbar sind ?
p.s. das CKDIV8 ist nicht gesetzt!

#define F_CPU 8000000  // 8mhz

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
  DDRA = 0x03;  // a0 und a1 sind ausgaenge
        PORTA = 0x03; // LEDs an

    while(1)
    {

    }
}

von S. Landolt (Gast)


Lesenswert?

Sieht nach wiederholtem Reset aus.

von Frontend (Gast)


Lesenswert?

Hallo Kalle,

überzeuge Dich doch noch einmal davon, ob
es am 2313a einen PORTA gibt. Datenblatt?

Gruß

Clemens

von Linksammler (Gast)


Lesenswert?

Kalle schrieb:
> die leds blinken bei folgendem code mit einer frequenz von
> ca. 10hz

Check die Fuses. z.B. WDTON/Watchdog-always-on gesetzt?

von Linksammler (Gast)


Lesenswert?

Frontend schrieb:
> es am 2313a einen PORTA gibt.

Hat er, wenn man auf Quarz und/oder Reset verzichtet.

von Ralph S. (jjflash)


Lesenswert?

Kalle schrieb:
> PORTA = 0x03; // LEDs an

PA2 ist der Resetanschluss. Je nach Fuseseinstellung wird wohl eine 0 
hier den MCU zurücksetzen  (weil du alle internen Bits des Ports A auf 0 
setzt - auch wenn die nicht nach außen gefuehrt sind).

Ein direktes Setzen eines kompletten Ports über eine Zuweisung birgt 
Risiken, weil eventuell Portbits gelöscht werden, die nicht gelöscht 
werden sollen.

In diesem Falle wäre ein:

PORTA |= 0x03;

besser, da es nur die Portbits PA0 und PA1 setzt, alle anderen aber 
unverändert läßt !

Grundsätzlich wäre:

#define ledport  PORTA
#define leddir   DDRA
#define led0     PA0
#define led1     PA1

...

leddir |= (1 << led0) | (1 << led1);      // LED Anschlüsse als Ausgang
ledport |= (1 << led0) | (1 << led1);

...

besser !

Folgende defines wären hilfreich:

#define setled0()   (ledport |= (1 << led0))
#define clrled0()   (ledport &= ~(1 << led0))

(äquivalentes für led1 )

Gruß Ralph

PS:
Fuses für ATtiny2313 für internen 8MHz Oszillator (kein Quarz) aber mit 
erhaltener Resetfunktion:

Lo-Fuse: 0xD4
Hi-Fuse: 0xDB

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.