-         

Ergebnis 1 bis 5 von 5

Thema: Probleme mit AtTiny2313

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2006
    Beiträge
    5

    Probleme mit AtTiny2313

    Anzeige

    Hallo,
    ich habe folgendes Problem mit meinem AtTiny2313:

    Sobald ein TTL Pegel an Pind.6 anliegt soll Pinb.1 auf 5V geschaltet werden.
    Die Schaltung ist extrem einfach und besteht eigentlich nur aus dem AtTiny2313, der ISP Stiftleite, ein 100nF Kondensator und ein 10µF Elko zwischen der Versorgungsspannung und Ground sowie ein 10K Widerstand als Pullup am Reset.
    Das Programm sieht folgendermassen aus:


    $regfile = "ATtiny2313.dat"
    $crystal = 4000000
    $baud = 9600
    $hwstack = 32
    $framesize = 24

    Config Pinb.1 = Output
    Config Pind.6 = Input

    Do
    If Pind.6 = 1 Then
    Pinb.1 = 1
    Else
    Pinb.1 = 0
    End If


    Loop
    End

    Es wird der interne Oszillator benutzt, Ckdiv ist disabled (fusebit C = 1).
    Bei Pind.6 = 0 ist auch Pinb.1 = 0.
    Bei Pind.6 = 1 oszilliert Pinb.1 mit einer Periode von etwa 0.2ms.
    Warum bleibt Pinb.1 nicht konstant auf 5V?


    Nächstes Problem:
    Pinb.1 soll alternieren: ca. 2 sec auf 5V und dann ca. 1 sec auf 0V
    Wie oben wird der interne Oszillator benutzt und Fusebit C = 1


    $regfile = "ATtiny2313.dat"
    $crystal = 4000000
    $baud = 9600
    $hwstack = 32
    $framesize = 24

    Config Pinb.1 = Output

    Reset Pinb.1

    Do

    Set Pinb.1
    Waitms 2000
    Reset Pinb.1
    Waitms 1000

    Loop
    End

    Am Pinb.1 wird mit einem Multimeter nun folgendes gemessen:
    Ca. 3 sec 5V,ca. 3 sec 0V usw.....
    Anscheinend funktioniert der waitms Befehl nicht?
    Könnt Ihr mir helfen?
    Gruß,
    Cybernix

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Den Fehler hat jeder schon mindestens einmal gemacht:
    Einen Ausgang setzt du Portb.1 = 1, nicht mit Pinb.1 = 1.
    Pin ist nur zum Abfragen des Eingangszustands.

    Gruß

    Rolf

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2006
    Beiträge
    5

    Vielen, vielen Dank

    Natürlich, jetzt wo Du es sagst....
    Da wäre ich in der nächsten Zeit nicht von selbst drauf gekommen.
    Vielen herzlichen Dank,
    Cybernix

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Damit er ohne weitere externe Beschaltung (Pullup) den Zustand erkennen kann, musst du noch den Input-Pin auf 1 setzen. Damit aktivierst du den internen Pullup.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Moin,

    es gibt da aber eine Sonderfunktion bei PinX.y der (neuen) AVRs,
    Deswegen ist auch das verhalten von 3sec High und 3sec Low. (1sec + 2sec)
    Denn wenn man den Port auf Ausgang hat, und dann den PinX.y setzt, toggelt der Ausgang, was genau zu diesem Ergebnis führt was Cybernix geschrieben hat. Das löschen von PinX.Y hat keine Funktion.

    Haben ein paar das DB nicht richtig gelesen
    Der Rest stimmt aber natürlich auch
    ausser:
    Der Pullup wird per PortX.Y gesetzt, wenn der Port Eingang ist, nicht per PinX.Y !

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •