mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny2313 : Seltsame Wirkung


Autor: Hans-jürgen Gebhardt (gebi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: (geloescht) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Dieser Beitrag wurde geloescht)

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>return 0; ? Wohin?

wird nie erreicht

Autor: Kojote (Gast)
Datum:

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

viel Erfolg beim Basteln

Autor: (geloescht) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Dieser Beitrag wurde geloescht)

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nämlich deshalb
>  for(;;)

Hat die gleiche Wirkung wie
   while(1)

Autor: (geloescht) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Dieser Beitrag wurde geloescht)

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Hans-jürgen Gebhardt (gebi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Sonic (Gast)
Datum:

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

Autor: Roy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.