Servus Leute, also ich will den Zustand von 3 IOPins auslesen, aber es haut nur bei einem hin. Beschalten ist er so wie im Forum beschrieben. 5V-10k-S1-GND und zwischen 10k und S1 greif ich ab. Beim einen Pin gehts, egal ob ich in Bascom schreib: Config Pinb.0 = Input Config PortB.0 = Input oder Config Porb = Input Dort gehts, aber auf den Pins B.1 und B.2 gehts nicht. Beschalten ist alles gleich...aber nur auf B.0 gehts. Versteh ich nicht so ganz. Chip ist ein Atmega16. Versucht hab ich auch schon: Ddrb = &B11111000 Laut Bascom-Hilfe stell ich so die untern Pins 0,1,2 auf Input und die anderen auf Output. MfG Matthias
Hallo, ob man in Bascom Config Portx.y = oder Config Pinx.y = schreibt ist egal, es wird immer das richtige Bit im entsprechenden DDRx gesetzt oder gelöscht, je nach Richtung. Bei Config PortX wird nur der ganze Port auf Ein- oder Ausgang gestellt. Hast Du das Board selbst gebaut, ist sonst nix daran angeschlossen ?
Servus, ich weis das egal sein sollte hab halt mal die Varianten durchgeprüft. An Port B is nix sonst angeschlossen. Ich frag mich nur warum nur der eine IO Pin regiert wärend die anderen es nicht tun. Ist bei allen drei alles gleich. MfG Matthias
Servus auch, evtl. zeigst Du uns doch etwas mehr von deinem Programm, vielleicht fällt's dann auf wo's zwickt !? Du kannst auch mal aussen am µC messen ob das mit dem Pegel so klappt wie Du meinst. mfG
Servus, also ich hab grad nochmal gemessen, wenn der MC drinsteckt sinds 4,7V ohne 5 Volt. Aber bei jedem Pin gehts auf 0 V wenn ich den Schalter schliesse. Damits besser aussieht hab ich den Quellcode mal in den Anhang gepasst damit alles drin ist. Wird hier zu viel. MfG Matthias
Hallo Matthias, bei deinem Programm fällt mir folgendes auf: Initialisiere den Hard & Softwarestack lieber im Programm und verlasse dich lieber nicht auf den Compiler, somit hast du immer alle Einstellungen im Programmfile. Lass das "Config LCDbus=0" weg das ist nur sinnvoll wenn du mit dem $LCD-Adressstatement arbeitest. Das ist aber nirgends in deinem Quellcode und kann dadurch zu fehlern führen. Was für nen Displaycontroller hat dein LCD? Du Schreibst "Config Pinb.0=Input", du solltest aber sicherheitshalber das Pinb.x durch "PortB.x" ersetzen. Es hat laut Mcselec doch auswirkungen je nach verwendetem Chip. D1 = Pinb.0 <-- ersetzt auch hier überall das Pin durch "Port" Für was ist das Waitms 100 Statement ganz unten drin? Solltest du vermeiden, da dadurch Daten oder Tastendrücke vom UART verloren gehen könnten. Außerdem Bremst das das ganze Programm aus. Probier das mal und Poste das Ergebnis bitte hier. :) EDIT: Wenn deine Spannung um 0.3 Volt nur bei gestecktem uC einbricht ist das etwas komisch. Wie erzeugst du die Versorgung, duch Linearregler? Hast du lange Leiterbahnen bis zum uC? Roland
Servus Roland, also die Verbindungen sich nicht so sehr lang. Maximal 5 cm vom 7805 Spannungsregler. <Initialisiere den Hard & Softwarestack lieber im Programm und verlasse <dich lieber nicht auf den Compiler, somit hast du immer alle <Einstellungen im Programmfile. Du meinst also das Ganze Config Zeug in die Routine Hautpprogramm oder? <Lass das "Config LCDbus=0" weg das ist nur sinnvoll wenn du mit dem <$LCD-Adressstatement arbeitest. Das ist aber nirgends in deinem <Quellcode und kann dadurch zu fehlern führen. Was für nen <Displaycontroller hat dein LCD? HD44780. Werd mal testen obs ohne funktioniert. Beim alten 8051 gings ohne jedenfalls nicht. Die kurze Wartezeit ist wegen dem Display, flackert mir sonst zu viel udn hat rein optische Gründe. Ich werds gleich mal mit den ersetzten von Pin nach Port testen...aber leider hatte ich das zuerst. MfG Matthias
Ok ausprobiert... Ergebnis: Display geht auch ohne BUS=4. ABER D1 = Portb.0 bringt mir garnix zurück. D1 = Pinb.0 dagegen schon. Komisch komisch...
Hallo, Roland Z. wrote: > D1 = Pinb.0 <-- ersetzt auch hier überall das Pin durch "Port" > Das sollte aber nicht gemacht werden ! Daten einlesen geht immer mit Pinx ! Warum rufst Du das Hauptprogramm als Sub auf, da werden schon die ersten Bytes im SRAM und Stack verschenkt ? Schreib das Hauptprogramm an die Stelle des Calls und danach ein End, danach die restlichen Subs. Zum Taster einlesen kannst du Dir mal den Befehl "Debounce" anschauen. Und Roland meinte diese Zeilen noch angeben: $framesize = 32 $swstack = 32 $hwstack = 32 Aber evtl. noch etwas anpassen, $hwstack grösser zB. 40.
@ Tiny 80, ups mist du hast recht, Habe mich da etwas vertan, sorry. :) @Matthias, vergiss das mit der Änderung von Pin in Port war mein Fehler. :D Laß das Ddrb mal anfänglich weg und initialisiere die Richtungsregister mit Config Portx.x=xxxxx das ist anfänglich etwas übersichtlicher.
@Matthias See attached file. The program will run with your hardware.
Servus, <Warum rufst Du das Hauptprogramm als Sub auf, da werden schon die ersten <Bytes im SRAM und Stack verschenkt ? <Schreib das Hauptprogramm an die Stelle des Calls und danach ein End, <danach die restlichen Subs. Ähm weil ichs net besser wusste :-) und sichs so übersetzen lies. Gut also das ist geändert. $framesize = 32 $swstack = 32 $hwstack = 32 Sind drin. Keine Änderung. Selbiges beim $hwstack = 32 $swstack = 16 $framesize = 40 Auch das was vorgeschlagen wurd von Anonymous mit Ddrb = &B00000000 Portb = &B00000111 haut auch net hin. Hab grad nochmals am MC gemessen. Das Signal geht sauber auf Ground und wieder auf High. Morgen löt ich mal spassenshalber den zweiten Schalter aufn IO Pin von B.0 nur um zu sehen obs da geht. Wenn ja weis ich echt kein Gramm mehr weiter. MfG Matthias
@Matthias The program Hautpprogramm99.bas was tested with real hardware. (Atmel STK500, ATmega16 and 4x20 LCD). When I set to ground PB0, PB1 and PB2 the 3 values on the LCD change from "1" to "0". When I send # via terminal emulator the correct values are sent back to the terminal. Verify your hardware.
Servus, Hardware ist OK. Hab alle drei schalter mal nacheinnander an den B.0 Pin gelötet und dort zeigt er die High Low wechsel an. Nachmals eine sau blöde Frage...Fusebit technisch kanns da an nix liegen oder? Oder vll weil im Datenblatt an PinB.1 in Klammern T1 und bei PinB.2 in Klammern INT2/AIN0 steht. Denn manchmal kommts mir so vor als wenn er Resetet wenn ich einen der Schalter an P.1 und P.2 änder. Ich Löt nacher nochmal spassenshalber den 2ten und 3ten Schalter an den Cport. Der sollte nach abschalten der JTAG ja auch gehn. MfG Matthias
Mahlzeit, so etz geht der Mist da ich Schalter S2 und S3 auf die Ports C0 und C1 gehängt habe. Vonwegen Hardware. Warum Port B1 und B2 nicht gehn...wird mir wohl ein Rätsel bleiben. Wegen Reset was ich vorhin meinte...da hat sich der Stecker zu Platine gelockert, ist halt schon ausgelutscht der mist. MfG Matthias
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.