PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit AtTiny2313



Cybernix
28.11.2008, 21:12
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

for_ro
28.11.2008, 21:26
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

Cybernix
28.11.2008, 21:39
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

stefan_Z
29.11.2008, 02:17
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.

linux_80
29.11.2008, 10:20
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 :mrgreen:
Der Rest stimmt aber natürlich auch ;-)
ausser:
Der Pullup wird per PortX.Y gesetzt, wenn der Port Eingang ist, nicht per PinX.Y !