hi all, wollte mal ganz schnell wissen ob das hier so geht. Wollte eigentlich in Basic, den ganzen Port A und C als Eingang definiert haben mit aktivierten Pullups an jedem Pin. und Die Ports B und D sollten einfach als Ausgänge definiert sein. Jedoch spuckt Bascom nen Fehler aus und will nicht compilieren. Kann man mit Basic alle Pins am Port direkt definieren oder muss ich ales einzen machen? $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config Portb = Output Config Portd = Output Config Pina = Input Porta = 1 Config Pinc = Input Portc = 1 Do If Pina.0 = 1 Then Portb.0 = 1 End If If Pina.1 = 1 Then Portb.1 = 1 End If If Pina.2 = 1 Then Portb.2 = 1 End If If Pina.3 = 1 Then Portb.3 = 1 End If If Pina.4 = 1 Then Portb.4 = 1 End If If Pina.5 = 1 Then Portb.5 = 1 End If If Pina.6 = 1 Then Portb.6 = 1 End If If Pina.7 = 1 Then Portb.7 = 1 End If If Pina. = 1 Then Portb. = 1 End If If Pinc.7 = 1 Then Portd.0 = 1 End If If Pinc.6 = 1 Then Portd.1 = 1 End If If Pinc.5 = 1 Then Portd.2 = 1 End If If Pinc.4 = 1 Then Portd.3 = 1 End If If Pinc.3 = 1 Then Portd.4 = 1 End If If Pinc.2 = 1 Then Portd.5 = 1 End If If Pinc.1 = 1 Then Portd.6 = 1 End If If Pinc.0 = 1 Then Portd.7 = 1 End If Loop End
Schreib es mal so: Config Portb = Output Config Portd = Output Config Porta = Input Porta = 255 Config Portc = Input Portc = 255 Und lass das hier weg Du kannst auch schreiben: PORTB=PINA If Pina. = 1 Then Portb. = 1 End If Gruß Rolf
hi danke, eine frage noch. was macht "Portc = 255" und wird hiermit: PORTB=PINA If Pina. = 1 Then Portb. = 1 End If auch jeweils der gegenüberliegende Pin angesprochen? Also das auch nur Pina.1 high bekommt und somit dann auch NUR Pinb.1 zum beispiel?
bitte schaue doch einfach in die Bascom-Hilfe. Da steht alles haarklein und verständlich erklärt. Oder sollen wir das für Dich tun ???
sorry das ich dich jetzt angepisst habe wegen 2 kleinen fragen. ich verkriech mich jetzt auch sofort in mein loch. trotzdem danke ich rolf und nicht dir du nichthelfer. und falls du mal jemals fragen hast dann schreib ein buch darüber und ein buch über die antworten. solche leute wie dich verschmutzen nur thread wo ein anfänger fragen stellt. sowas wie "benutz die SuFu, google, guck ins handbuch.." bla nervt. es gibt schon gründe warum ich hier schreibe und nicht 10min irgendwo anders was lesen will.
lies doch einfach statt 10 Minuten zu schreiben ;-), dann hast Du mehr Zeit ins Handbuch zu schauen. Es bringt Dich wirklich viel schneller weiter. Und wenn Du dann mal wirkliche Probleme hast, hilft Dir hier gern jeder weiter; sofern er nicht gerade selber in Bücher schaut und lernt...
> sowas wie "benutz die SuFu, google, guck ins handbuch.." bla nervt. Die Tips sind aber gut gemeint und auch berechtigt. > es gibt schon gründe warum ich hier schreibe und nicht 10min irgendwo > anders was lesen will. Nunja, wenn Du an der richtigen Stelle liest, erreicht Du mehr, als wenn Du andere Leute für Dich arbeiten lässt. Nimm das Datenblatt Deines Controllers und schau Dir die Registerbeschreibung von PORTA, PINA_ und _DDRA genau an. Dann interessiere Dich mal für den Zusammenhang von Bits und Byte. ...
Hab mich beim Einfügen etwas vertan. Sollte eigentlich so heißen: Und lass das hier weg If Pina. = 1 Then Portb. = 1 End If Du kannst auch schreiben: PORTB=PINA Wobei dass nicht gleich deinen If-Blöcken ist, aber wohl so wie du es willst. If Pina.0 = 1 Then Portb.0 = 1 End If Falls der Pina.0 einmal 1 ist, geht der Portb.0 nie wieder auf 0. Bei PORTB=PINA geht jeder PORTB.x sofort wieder auf 0, wenn der PINA.x auf 0 geht. Das entsprechende für PINC und PORTD wäre dann PORTD.0=PINC.7 PORTD.1=PINC.6 usw. Das kannst du auch über eine Schleife erledigen. Ein direktes Überkreuz-Setzen gibt es leider nicht. Gruß Rolf
So hab es mal so versucht: Bauplan laut Bild, wo ich Testweise nur eine LED angeschlossen habe. Anstatt einen Taster habe ich einen Fotosensor drangebaut, der wenn es dunkel ist einen sehr hohen Widerstand hat (ca. 5MOhm) und wenn man ihrn bestrahlt ca. 500 Ohm. Ich habe im dunkeln den Fotosensor mit einer Taschenlampe bestrahlt jedoch hat dieser keine 1 geliefert und meine LED ging nicht an. Weis jemand wo der Fehler liegt? So hoffe habe alles klar genug erklärt und hoffe das das mal keine anfänger frage ist. $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config Portb = Output Config Portd = Output Config Pina.0 = Input Config Pina.1 = Input Config Pina.2 = Input Config Pina.3 = Input Config Pina.4 = Input Config Pina.5 = Input Config Pina.6 = Input Config Pina.7 = Input Porta.0 = 1 Porta.1 = 1 Porta.2 = 1 Porta.3 = 1 Porta.4 = 1 Porta.5 = 1 Porta.6 = 1 Porta.7 = 1 Config Pinc.0 = Input Config Pinc.1 = Input Config Pinc.2 = Input Config Pinc.3 = Input Config Pinc.4 = Input Config Pinc.5 = Input Config Pinc.6 = Input Config Pinc.7 = Input Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 Do If Pina.0 = 1 Then Portb.0 = 1 End If If Pina.1 = 1 Then Portb.1 = 1 End If If Pina.2 = 1 Then Portb.2 = 1 End If If Pina.3 = 1 Then Portb.3 = 1 End If If Pina.4 = 1 Then Portb.4 = 1 End If If Pina.5 = 1 Then Portb.5 = 1 End If If Pina.6 = 1 Then Portb.6 = 1 End If If Pina.7 = 1 Then Portb.7 = 1 End If If Pina. = 1 Then Portb. = 1 End If If Pinc.7 = 1 Then Portd.0 = 1 End If If Pinc.6 = 1 Then Portd.1 = 1 End If If Pinc.5 = 1 Then Portd.2 = 1 End If If Pinc.4 = 1 Then Portd.3 = 1 End If If Pinc.3 = 1 Then Portd.4 = 1 End If If Pinc.2 = 1 Then Portd.5 = 1 End If If Pinc.1 = 1 Then Portd.6 = 1 End If If Pinc.0 = 1 Then Portd.7 = 1 End If Loop End
Schmeiß die verdammten Configs über Bord und benutze die I/O-Register gemäß Datenblatt. Anders begreifst Du die Zusammenhänge nie... ...
Die Config-Anweisungen machen das Programm ziemlich unübersichtlich, aber es geht auch anders: Du kannst die Register auch direkt beschreiben: DDRA=&B00000000 PORTA=&B11111111 Das bedeutet: Im DDR-Register stellt eine Null den Port auf Eingang und im Port-Register schaltet eine Eins den Ziehwiderstand (Neudeutsch: Pull-up) ein. Diese beiden Zeilen haben jetzt also den gesamten Port A als Eingang konfiguriert und alle Pull-up-Widerstände zugeschaltet. MfG Paul
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.