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
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.
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