PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger kommt nicht weiter.



Rick07
19.02.2008, 19:31
Hallo Zusammen,

mein erstes Programm läuft nicht.
Ich möchte mit einem Attiny13 ein Signal ausgeben.
Ausgabe auf Pin b4.
Der Puls ist 1ms.
Je nach Zustand von Pin b0 soll die Pause 5 oder 2 ms sein.
Es ist jedoch egal ob ich GND oder VCC an b0 anlege.
Die Pause ist immer 2ms
Warum?

'Target ATtiny13'


$regfile = "ATtiny13.dat"
'der mit internen 9,6MHZ getaktet wird (Fuse Takt/8 nicht gesetzt!)'
$crystal = 9600000

$hwstack = 32
$swstack = 8
$framesize = 8

'Dims ---------------------------------------------------------------------------'

Dim Eingabe As Word

Dim Puls As Word
Dim Pause As Word

Config Pinb.0 = Input
Config Pinb.4 = Output

Do
If Portb.0 = 1 Then
Pause = 5
Else
If Portb.0 = 0 Then
Pause = 2
End If
End If


Portb.4 = 1
Waitms 1
Portb.4 = 0
Waitms Pause

Loop

End

chr-mt
19.02.2008, 20:58
Hi,
Abfragen von Pins gehen mit "Pin" nicht mit "Port"
Also muss es heißen:
if Pinb.0=1

Wenn du mit einer "1" (High) schalten willst, muss der Pin mit einem Pulldown-Widerstand auf GND gelegt werden.

Kannst es aber auch andersrum machen, den Internen Pullup des AVR benutzen, und nach GND schalten.

Also:



config pinb.0 = input
Portb.0 = 1 'internen Pullup für den Pin einschalten

do
If Pinb.0 = 0 Then
'mache irgendwas
End If
loop
end



Gruß
Christopher

milkbubi
20.02.2008, 10:29
Hab zwar keine Ahnung warum die Pause immer 2ms lang ist aber soweit ich weiß funktiert wait... mit Variablen nicht. Da müsstest du Timer benutzen.

mfg milkbubi

chr-mt
20.02.2008, 17:10
Hi,
doch, Wait und Waitms funktionieren mit Variablen.
Waitus allerdings nicht.

Gruß
Christopher

milkbubi
21.02.2008, 13:25
Ach so dann wars das, na dann hab ich wieder was gelernt.

mfg milkbubi

Rick07
21.02.2008, 21:49
Danke für die Infos,

dass bei waitus keine Variablen erlaubt sind war mir nicht bekannt.
Ich hab es getestet. Mit waitms klappt es mit waitus nicht!

Super

Feratu
23.02.2008, 16:02
Gibts eigentlich ne alternative für waitus ?
wenn die zeit schon recht genau sein soll ?

Ich mach das grad so

dim z as integer
dim z2 as integer
z2 = 100
for z = 1 to z2
next z

das is bei 8MHz rechenleistung in etwa 1us
so pie x Dauemn halt ;P

milkbubi
23.02.2008, 16:10
Soweit ich weiß kannst du es alternativ nur mit Timer machen. Das ist auch günstiger, da parallel noch dein restliches Programm weiter laufen kann.

mfg milkbubi