Hi,
mal ne Frage - übe mich gerade mit Bascom ......
Möchte, wenn ich den Taster auf High setze (also Pind.0 = 1=)
das sich ein LED einschaltet und auch eingeschalten bleibt, bis ich den
Taster erneut drücke .....
Habs bissher nur geschafft die LED zum leuchten zu bringen solange ich
am Taster drücke und umgekehrt auch sämtlich Variationen ....
Aber noch nicht das ein Wert dann bleibt bis ich wieder dücke.
Mit welchem Befehl, muss ich das machen??? SET ???
Hmmm .....
funktioniert nicht ganz - krieg im Bascom dann nur Fehlermeldungen, die
mir nicht gerade viel sagen.
Hab mit dieser Schreibweise gerade mal eine Fehlermeldung - wo liegt
der Fehler ???
$regfile = "8535def.dat"
$crystal = 4000000
Config Portb = Output
Config Portd = Input
Do
Portb = &B11111111
If Pind.0 = 1 Then Toggle Portb.0 = 0 End If
Loop
P.S.: die Leds hängen bei mir auf VCC darum ist Portb auf High gesetzt
Bei "If then" Abfragen gilt folgendes
If then
...irgendwas
end if
oder
if then ... irgendwas
also wenn alles in einer Zeile steht, dann ist das "End If"
überflüssig
Hallo,
möchte auch Bascom lernen.
Kann es sein dass
"" If Pind.0 = 1 Then Toggle Portb.0 = 0 End If ""
----
die Zuweisung "= 0 " nicht hingehört ??
Denn Toggle wechselt den Pinzustand und wird sich nicht dreinreden
lassen.
Gruss Kurt
angenommen, ich schalte die pull ups am port d ein, ( mit &B11111111 )
wie schalte ich sie wieder aus falls ich das will ? mit &B00000000 ?
ist das überhaupt sinnvoll die einzuschalten? hab so verdrahtet:
von VCC auf nen vorwiederstand. Von dort einmal zu PD und einmal zum
Taster, welcher wiederum dann zu GND geht
Hallo,
Ja, Pullups ausschalten mittels Portd = &B0000_0000
Sie haben nun selbst ein pullup gemacht (widerstand von PD nach VCC).
Nicht notwendig wenn das schon in AVR verfugbar ist..
Wenn port mal als ausgang geschaltet ist, kann kurzschluss entstehen
via taster zum GND..
Taster anschluss am besten mit interne pullup, und widerstand
von port nach taster.
Taster dann nach GND.
Widerstand mindestens 250 ohm, um strom zu begrenzen auf 20mA.
1Kohm ist OK.
Gruss,
Peter
ist das überhaupt sinnvoll die einzuschalten? hab so verdrahtet:
von VCC auf nen vorwiederstand. Von dort einmal zu PD und einmal zum
Taster, welcher wiederum dann zu GND geht
ok steh komplett auf der Leitung .....
hab jetzt paar Test gemacht, die auch alle recht gut funktioniert
haben.
Doch jetzt häng ich wieder. Ich möchte, wenn ich das erste mal am
taster drücke, dass die erste led angeht.
beim zweitenmal drücken die zweite led unf beim dritten mal zb sollen
alle wieder ausgehen ....
hab versucht dies in meinen letzten geposteten code integriert mit if
.... funktioniert aber nicht
schreib ich ein komplett neuen code, schaff ich auch immer nur eine led
problemlos (oder ne gruppe) zu steuern
aber ich schaffs einfach nicht das so zu verwirklichen wie ichs gerade
vorhabe .....
Bitte Bitte Helfen :-)
nagut bin nun zu dem ergebniss gekommen - funktioniert eigentlich ganz
gut hat nur nen kleinen hacken.
nachdem ich alle leds wieder abgedreht habe, bleiben sie auch aus und
es tut sich nichts mehr - dachte, dass loop sei dafür da, das es
wieder von vorn beginnt ..... es tut sich aber nichts
$regfile = "8535def.dat"
$crystal = 4000000
Config Portb = Output
Config Portd = Input
Portd = &B00000000
Portb = &B11111111
Debounce Pind.0 , 0 , Taster
Dim X As Byte
X = 0
Taster:
Do
If X = 0 And Pind.0 = 0 Then
X = 1
Portb.0 = 0
End If
If X = 1 And Pind.0 = 1 Then
X = 2
End If
If X = 2 And Pind.0 = 0 Then
X = 3
Portb.1 = 0
End If
If X = 3 And Pind.0 = 1 Then
X = 4
End If
If X = 4 And Pind.0 = 0 Then
Portb.0 = 1
Portb.1 = 1
End If
Loop
Hallo Ralf,
wenn ich dass richtig sehe bleibt deine Laufvar X
nach einem Schleifendurchlauf auf 4 stehen.
Alle folgenden Durchläufe finden nur "4"
in der letzten Abfrage sollte X auf 1 gesetzt werden dann gehts wieder
von Vorne an weiter.
Gruss Kurt
hab nicht richtig gelesen
in der letzten Abfrage sollte X auf 1 gesetzt werden dann gehts wieder
von Vorne an weiter.
X auf "0" setzen.
Viel Erfolg Kurt
ja sowas in der Richtung habe ich mir auch gedacht, darum habe ich den
Code jetzt so geändert:
So funktionierts jetzt auch einwandfrei - das einzige Problem was jetzt
halt noch besteht, ist das ich nicht schnell drücken darf, sondern dem
AVR zwischen den Schaltvorgängen ein bissi Zeit lassen muss.
Das ist aber wahrscheinlich ein Geschwindigkeitsproblem von Bascom her,
oder?
$regfile = "8535def.dat"
$crystal = 4000000
Config Portb = Output
Config Portd = Input
Portd = &B00000000
Portb = &B11111111
Debounce Pind.0 , 0 , Taster
Dim X As Byte
X = 0
Taster:
Do
If X = 0 And Pind.0 = 0 Then
X = 1
Portb.0 = 0
End If
If X = 1 And Pind.0 = 1 Then
X = 2
End If
If X = 2 And Pind.0 = 0 Then
X = 3
Portb.1 = 0
End If
If X = 3 And Pind.0 = 1 Then
X = 4
End If
If X = 4 And Pind.0 = 0 Then
X = 5
Portb.0 = 1
Portb.1 = 1
End If
If X = 5 And Pind.0 = 1 Then
X = 0
End If
Loop
das wird wohl an dem debounce liegen. du kannst die entprellzeit aber
niedriger setzen. guck mal in die hilfe-datei. da steht das ganz gut
beschrieben.
oder machst du das vielleicht alles im simulator? der ist von natur aus
sehr langsam.
nee lade das programm jedesmal in den avr
der legt sowieso hin und wieder ein sehr merkwürdiges verhalten an den
tag .....
wie gesagt die schaltung funktioniert, nur hin und wieder macht er was
ganz anderes wie das er beide leds einschaltet oder nur eine aus dann
gehts hin und wieder gleich nach der ersten wieder aus oder es blinkt
nur ....
aber meistens (vorallem wenn ich langsam drücke) funktioniert er ....
Hi Ralf,
irgendwie ist die do loop schleife bei dir Falsch gesetzt, du willst
doch den Taster in permanent abfragen oder nicht ???
Probiers mal so, der kleine Code sollte genau das machen was du vor
hast....
$regfile = "8535def.dat"
$crystal = 4000000
Config Portb = Output
Config Portd = Input
Do
Debounce Pind.0 , 0 , Taster, sub
loop
Dim X As Byte
X = 0
Taster:
Incr X
Portb = 0
If x = 1 then
Set Portb.0
elseif x = 2 then
Set Portb.1
elseif x = 3 then
Set Portb.2
elseif x = 4 then
Set Portb.3
elseif x = 5 then
X = 0
End If
Return
End
Gruß
Sven
hmm ..... auch nicht ganz das wahre
hab die debounce zeit auch schon geändert nützt aber auch nicht viel
hatte mich auch schon mit der do-loop schleife gespielt.
find einfach nicht den bug da drinnen
Ha !!!!!
Ich hab des Rätsel´s Lösung
Ich erstell den Code ja mit dem Programm Bascom-AVR .....
...... und da war unter: Optionen -> Compiler -> Chip noch auf den
"alten" 2313 eingestellt !
Jetzt auf den 8535er umgestellt, funktioniert es ohne Fehler !!
Ist rein das Geschwindigkeitsproblem noch - aber das liegt entweder an
Bascom selber, oder an der Debounce Zeit welche auf 0,1 gestellt
wurde.
Thanks @ All für Eure Hilfe
Also "Toggle" funktioniert bei mir überhaupt nicht, hats noch nie ;-)
Somit muß ich die Pins immer mit "von Hand" schalten z.b. mit
"Porb.0 = 0" oder mit Set/Reset.
Denke mal das ist ein Bascom Fehler.
Ansonsten sollte es auch ohne "Debounce" klappen.
Hoffe mal das hilft dir weiter
lg Ralf
Hallo Ralf,
mmhh, der Code müßte eigentlich rennen wie nix....
Versuch doch mal eben unter den Compiler Settings auch die
Frequenz von 4 Mhz einzustellen, kann mir nur noch vorstellen,
das es daran liegt, evtl, sind hier 8Mhz eingetragen....
An Bascom selbst wird es nicht liegen...
Sven
nein das kanns auch nicht sein - die sind nämlich schon eingestellt.
wie gesagt ohne probleme jedoch akzeptiert der avr kein schnelles
gedrücke ratlosbin