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 ???
if pind.0 = 1 then toggle "led" aber wahrscheinlich musst du den schalter entprellen, such in der hilfe mal nach debounce.
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
Hallo, vielleicht musst Du noch die internen PullUps am PortD noch aktivieren. Ich weiss nicht mehr genau wie BASCOM das macht. Gruss Andreas
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
Versuch mal: $regfile = "8535def.dat" $crystal = 4000000 Config Portb = Output Config Portd = Input Portd = &B1111_1111 'Pullups einschalten! Portb = &B1111_1111 Do If Pind.0 = 1 and Portb = &B1111_1111 Then Portb = &B0000_0000 If Pind.0 = 1 and Portb = &B0000_0000 Then Portb = &B1111_1111 Loop ------------------------------ODER---------------------------- $regfile = "8535def.dat" $crystal = 4000000 Config Portb = Output Config Portd = Input Portd = &B1111_1111 'Pullups einschalten! Portb = &B1111_1111 Do If Pind.0 = 1 Then Toggle Portb.0 Loop MFG, Peter.
hi, versuchs mal hiermit: $regfile = "2313def.dat" Config Portb = Output Config Portd = Input Portd = &B00000001 Portb = &B00000001 Pind.0 = 1 Do Debounce Pind.0 , 0 , Schalten , Sub Loop End Schalten: Toggle Portb.0 Return Bei mir klappt es so ! MFG
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
Hi, Danke daweil für Eure Hilfe! Funktioniert jetzt mit folgendem Code: $regfile = "8535def.dat" $crystal = 4000000 Config Portb = Output Config Portd = Input Portd = &B11111111 Portb = &B11111111 Do Debounce Pind.0 , 0 , Schalten1 , Sub Loop Schalten1: Toggle Portb.0 Return
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.