Forum: Mikrocontroller und Digitale Elektronik Kleine Unklarheit wegen Bascom und Inputpins.


von Matthias (Gast)


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

von John S. (linux_80)


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 ?

von Matthias (Gast)


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

von John S. (linux_80)


Lesenswert?

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

von Matthias (Gast)


Angehängte Dateien:

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

von Roland Z. (r-zimmermann)


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

von Matthias (Gast)


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

von Matthias (Gast)


Lesenswert?

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

von John S. (linux_80)


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.

von Roland Z. (r-zimmermann)


Lesenswert?

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

von Anonymous (Gast)


Angehängte Dateien:

Lesenswert?

@Matthias

See attached file.
The program will run with your hardware.

von Matthias (Gast)


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

von Anonymous (Gast)


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.

von Matthias (Gast)


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

von Matthias (Gast)


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

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
Noch kein Account? Hier anmelden.