Kleine Unklarheit wegen Bascom und Inputpins.

Gast #692908
Lesenswert?

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
#692926
Lesenswert?

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 ?
Gast #692962
Lesenswert?

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
Gast #692977
Lesenswert?

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
Angehängte Dateien:
#692996
Lesenswert?

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
Gast #693029
Lesenswert?

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
#693039
Lesenswert?

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.
Gast #693071
Lesenswert?

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
Gast #693093
Lesenswert?

@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.
Gast #693346
Lesenswert?

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
Gast #693415
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren