Forum: Mikrocontroller und Digitale Elektronik ATtiny2313 : Seltsame Wirkung


von Hans-jürgen G. (gebi)


Lesenswert?

Hallo,
hier bekam ich eine seltsame Wirkung:
----
Schaltung:
Taster an PORTA0 und PORTA1 nach GND
LED an PORTB0
Funktion:
Taster PORTA0 > LED ein
Taster PORTA1 > LED aus
-------------------------------
#include <avr/io.h>
#include "binary.h"               //definiert die Binärdarstellung
                                  // b......

int main( void ){
  //Ports initialisieren
  DDRB     = b00000001;      //PortB0 LED-Ausgang
  PORTB    = b00000000;             //PortB alle 0

  DDRA     = b00000000;             //PortA0,1  Eingang
  PORTA    = b00000011;             //PortA0,1  Pullup ein

  for(;;){          // main loop
  if ((PINA & b00000001) == 0){
    PORTB = PORTB | b00000001;
    };
  if ((PINA & b00000010) == 0){
    PORTB = PORTB & b11111110;
    }
  }
  return 0;

Die LED an PORTB0 flackert bei Taster PORTA0, ev. längeres Drücken LED 
wieder aus. Auch bei der Betätigung Taster PORTA1 unbestimmter Zustand. 
Prellen dürfte ja hier keine Rolle spielen.
Verwende ich als Eingang PORTD, funktioniert das Pgm. wie erwartet. Sind 
etwa alternative Funktionen von PORTA standartmäßig eingeschaltet, hab 
ich das im Manual nich gefunden?

Viele Grüße
   Hans-Jürgen

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Thorsten (Gast)


Lesenswert?

>return 0; ? Wohin?

wird nie erreicht

von Kojote (Gast)


Lesenswert?

Soweit ich weis sind die Alternativfunktionen von portA standartmäßig 
aktiv. schau dir mal das Datenblatt an.

viel Erfolg beim Basteln

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Dieter Werner (Gast)


Lesenswert?

nämlich deshalb
>  for(;;)

Hat die gleiche Wirkung wie
   while(1)

von (geloescht) (Gast)


Lesenswert?

(Dieser Beitrag wurde geloescht)

von Andi (Gast)


Lesenswert?

Wie hast du denn die Fuse-Bits des Tiny2313 programmiert?
PA0 und PA1 sind auch die Pins für einen externen Quarzoszillator. Wenn 
du also nicht einen internen Oszillator ausgewählt hast, kann das 
Programm gar nicht richtig ablaufen.

Gruss Andi

von Läubi (Gast)


Lesenswert?

Ich bin mir jezt unsicher aber hat PortA überhaupt interne Pullups?
Standardmäßig sind die alternativen Funktionen aus, es sei den er 
versucht den ResetPin zu verwenden ;)

von Hans-jürgen G. (gebi)


Lesenswert?

Hallo,
Die Alternativfunktionen von PORTA0 und PORTA1 als Anschluß für XTAL 
werden über Fuses gesetzt. Diese stehen auf internen Oszillator.
-
Die Sache mit dem return in int main (void) resultiert mal aus einer 
Compilerwarnung. Aber richtig, das return wird nie erreicht.
-
Laut Datenblatt hat PORTA interne Pullups.

   Viele Grüße
     Hans-Jürgen

von Sonic (Gast)


Lesenswert?

Wo hastdu denn die abschließende '}' der main gelassen? Hat der Compiler 
da keine Fehler ausgespuckt, odr ist das nur ein Codeschnipsel?
Ansonsten siehe oben.
Eine Entprellung, bzw. Abfrage der Taste auf drücken und anschließend 
loslassen fehlt auch, da wird nix anderes als Flackern 'rauskommen!

von Sonic (Gast)


Lesenswert?

Ups.. zu schnell geguckt! Sind ja verschiedene Taster! Flackert 
natürlich nicht.

von Roy (Gast)


Lesenswert?

Verwendest du ein stk500?
Hatte das gleiche Problem, bei PORTB für meine Taster hat alles 
funktioniert und sobald ich sie an PORTA betreiben wollte ging die 
Abfrage nicht mehr.
Das stk500 unterstützt den ATtiny2313 nicht, sondern nur den Vorgänger 
AT90S2313. Der hat keinen PORTA, weshalb der Sockel auf dem stk500 nur 
mit den Oszillatoreingängen XTAL1 und XTAL2 verbunden ist.
Somit hat man an PA0 und PA1 am Controller keinen definierten Zustand.
Die einzige (allerdings etwas brutale) Lösung ist es, die beiden Pins 
wegzubiegen und selbst mit den Tastern zu verdrahten!

Hoffe ich konnte helfen!

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.