mikrocontroller.net

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


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: John Small (linux_80)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Roland Z. (r-zimmermann)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Anonymous (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias

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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anonymous (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.