Bascom Pd0 und PD1 funktionieren als Input aber nicht als Output

wobo

Neues Mitglied
10. Aug. 2011
5
0
0
Sprachen
Hallo zusammen,

ich bin neu hier, also bitte verzeiht mir, wenn ich im falschen Forum gelandet bin. Ich habe folgendes Problem:

Ich habe ein Experimentierboard EDB von MCS Electronics mit eienm ATMega88. Die meisten Versuche funktionieren sehr gut und ich fange an zu verstehen, was ich tue. Eines verstehe ich allerdings nicht.

Ich habe mir eine einfache Versuchsschaltung aufgebaut, mit der ich einen Eingang mit einem Taster verbunden habe und einen Ausgang mit einer LED. Wenn ich den Taster betätige soll die LED aufleuchten. Hier ist der BASCOM Code:

$regfile = "m88def.dat"

Config Pind.1 = Input
Config Pind.7 = Output

Do
Portd.7 = Pind.1
Loop

End


Das funktioniert alles wunderbar und ich habe den Input und den Output zu Testzwecken mit mehreren unterschiedlichen Pins ausprobiert (also mal Pind.5 als Input und Pinb.7 als Output oder ähnliches). Sobald ich allerdings Pind.0 und Pind.1 als Output definiere funktioniert es nicht, wenn ich die gleichen Pins als Input definiere funktioniert es (änderund der Beschaltung sebstverständlich vorrausgesetzt). Ein Hardwarefehler kann es also nicht sein, weil die beiden Pins ja als Input funktionieren. Beide Pins sind auch bidirectional so viel ich weiß und die Programmstruktur habe ich auch nicht geändert sondern nur die Pin-Bezeichnung. Es sieht also so aus, als wollte der ATMege88 PD.0 und PD.1 nicht als Output freigeben. Kann das sein oder gibt es da noch andere Einstellungen die ich berücksichtigen muß???

Kann mir da jemand bitte weiterhelfen?

Liebe Grüße
wobo
 
Hi wobo,

Das funktioniert alles wunderbar und ich habe den Input und den Output zu Testzwecken mit mehreren unterschiedlichen Pins ausprobiert (also mal Pind.5 als Input und Pinb.7 als Output oder ähnliches).
Soweit so gut ...

Sobald ich allerdings Pind.0 und Pind.1 als Output definiere funktioniert es nicht,
kann auch nicht gehen.

wenn ich die gleichen Pins als Input definiere funktioniert es (änderund der Beschaltung sebstverständlich vorrausgesetzt).
Kann normalerweise auch nicht gehen. Das geht nur weil du einen bestimmten Teil der internen Eingangsschaltung mißbrauchst (den PullUp-Widerstand)

Ein Hardwarefehler kann es also nicht sein, weil die beiden Pins ja als Input funktionieren. Beide Pins sind auch bidirectional so viel ich weiß und die Programmstruktur habe ich auch nicht geändert sondern nur die Pin-Bezeichnung.
Ich würde mal eher von einem Denkfehler ausgehen...

Es sieht also so aus, als wollte der ATMege88 PD.0 und PD.1 nicht als Output freigeben. Kann das sein oder gibt es da noch andere Einstellungen die ich berücksichtigen muß???
Der macht schon das was du ihm sagst. Aber nicht so wie du es dir denkst :rolleyes:
Sieh dir das mal an ...
Mini-FAQ : Die Port-Register DDRx, PORTx, PINx
Dann wird einiges klarer ...

Mit deinem ... Config Pind.1 = Input ... und ... Config Pind.7 = Output ... veränderst du die Bits im DDRD-Register. Also die DATEN-Richtung der Anschlußpins.

Du kannst den Pin auf Ausgang schalten und trotzdem mit PinD.x den grade anliegenden (über PortD.x selbst generierten Pegel) abfragen. Hat aber nicht wirklich einen Nutzwert (außer bei absoluten Spezialfällen, würde jetzt aber zu lange dauern). Und wenn du den Anschluß auf Eingang stellst dann schaltest du eigentlich nur den PullUp-Widerstand mit PortD.x an oder aus. Das kann man natürlich am Anschluß messen. Man kann damit auch nen Transistor durchschalten. Das wars aber auch da er so um die 40..50kOhm hat.

Gruß
Dino
 
Hi Wobo,

als Crossposter machst du dir keine Freunde! http://www.bascom-forum.de/showthread.php?3414-Pd0-und-PD1-funktionieren-als-Input-aber-nicht-als-Output
Vor Allem, wenn man so banale Sachen gleich in mehreren Foren gleichzeitig postet.
für Anfänger empfiehlt es sich eigentlich erst mal die FAQs und Tutorials der Foren durchzuarbeiten. Da sind ne Menge brauchbarer Infos drin. Nicht nur hier sondern auch beim Roboternetz und bei Mikrocontroller.net
Die sind echt lesenswert und erzeugen so manchen Aha-Effekt.

Wenn es wirklich irgendwo beim Verständnis hakt dann melde dich einfach. Es wird gerne erklärt wenn etwas Probleme bereitet. Es wird aber auch immer Eigeninitiative erwartet. Also ... weiter gehts ... ;)

Gruß
Dino
 
Hallo Dino,

danke für Deine konstruktiven Hinweise. Das ich das Thema in zwei Foren gepostet habe ist nicht OK, dafür entschuldige ich mich.

Nachdem ich den Beitrag von Markus
http://www.avr-praxis.de/forum/showthread.php?372-Bascom-Alias-Input-Output-.....
gelesen hatte, war ich davon überzeugt die richtige Verwendung von Port und Pin verstanden zu haben. Dort schreibt er:

Konfiguration:
- Mit "Config Portd = Input" konfigurierst Du einen gesamten Port als Eingang.
- Mit "Config Portb = Output" konfigurierst Du einen gesamten Port als Ausgang.
- Einen einzelnen Pin konfigurierst Du mit "Config Pinc.6 = Output" als Ausgang
- Einen einzelnen Pin konfigurierst Du mit "Config Pinc.6 = Input" als Eingang. -- Auch hier ist ggf. der PullUp wieder zu berücksichtigen.

Danach war ich der Ansicht, dass man mit Portx den gesamten Port und mit Pinx den einzelnen Pin anspricht, unabhängig davon ob es sich um einen Eingang oder Ausgang handelt.
Dein Mini-FAQ sagt da etwas anderes, wenn ich das richtig interpretiere. Ich finde das Thema immer noch sehr verwirrend und wünsche mir eine Quelle, wo das in Verbindung mit Config mal eindeutig beschrieben ist. Ich werde die Datenrichtung meiner Ports in Zukunft mit DDR konfigurieren, bis ich das Thema mit Config richtig verstanden habe.
 
Hi Wobo,

Danach war ich der Ansicht, dass man mit Portx den gesamten Port und mit Pinx den einzelnen Pin anspricht, unabhängig davon ob es sich um einen Eingang oder Ausgang handelt.
Dein Mini-FAQ sagt da etwas anderes, wenn ich das richtig interpretiere. Ich finde das Thema immer noch sehr verwirrend und wünsche mir eine Quelle, wo das in Verbindung mit Config mal eindeutig beschrieben ist. Ich werde die Datenrichtung meiner Ports in Zukunft mit DDR konfigurieren, bis ich das Thema mit Config richtig verstanden habe.
Tja ... eigentlich ist es sehr einfach ...

DDRB/PINB/PORTB => das ist jeweils ein 8Bit-Register in dem jedes Bit einen Pin des IO-Ports B wiederspiegelt

DDRB.3/PINB.3/PORTB.3 => Das ist das Bit3 aus dem jeweiligen Register (darum auch das .3)

DDRx => stellt dir die Datenrichtung des IO-Ports ein ... also ob Eingang oder Ausgang
PINx => spiegelt die aktuell am IO-Port anliegenden logischen Pegel wieder
PORTx => stellt dir je nach Wert im DDRx entweder den PullUp-Widerstand oder den Ausgangstreiber des IO-Ports ein

Alle Einstellungen kann man für jedes Bit (jeden Pin) des IO-Ports einzeln erledigen in dem man ein einzelnes Bit in dem Register bearbeitet oder man macht es für den gesamten IO-Port (alle 8 Pins) auf einmal in dem man das gesamte Register (alle 8 Bits / das gesamte Byte) bearbeitet.

Schau dir mal in meiner Mini-FAQ die beiden Schaltpläne an. Da siehst du die internen Abläufe in den Registern und der Elektronik eines IO-Pins.

Gruß
Dino
 
Hi Dino,

da fällt mir grad was zu ein. Auch wenn's Wobo nun komplett verwirrt - die PullUps sind doch eigentlich Konstantstromquellen oder? Jetzt frag mich nicht, wo ich das gelesen habe.
 
Hi,

da fällt mir grad was zu ein. Auch wenn's Wobo nun komplett verwirrt - die PullUps sind doch eigentlich Konstantstromquellen oder? Jetzt frag mich nicht, wo ich das gelesen habe.
Beim PCF8574 (I2C-IO-Baustein) stimmt das. Da liefern die 100µA.
Beim Atmel ... Könnte sein. Bin mir da aber grad nicht sicher. Ich hab da mal was mit 40..50kOhm gelesen.

Mal grad nachgelesen ... beim Mega32A steht da folgendes ...
- Rrst (Reset Pull-up Resistor) min. 30 / typ. 60 / max. 85 kΩ
- Rpu (I/O Pin Pull-up Resistor) min. 20 / max. 50 kΩ
also keine Konstantstromquellen. In den internen Schaltplänen sind auch Widerstände eingezeichnet.

Gruß
Dino
 
Hi zusammen,

das Problem hat seine Erklärung gefunden, nachdem ich den support von MCS angeschrieben habe. PD0 und PD1 sind bei meinem board UART Pins und mit dem boot loader verbunden. Notfalls kann man das softwaremäßig abschalten wenn man die Pins unbedingt braucht. Mein board ist eine revidierte Version 2.00, die Doku wurde dahingehend noch nicht angepasst. Das erklärt auch, warum alle Experimente am PortB funktionieren und am PortD nur unvollständig. Seltsamerweise verwenden die im Handbuch beschriebenen Experimente teilweise den PD0 und den PD1 - verwirrend, wenn die Doku nicht auf dem neusten Stand ist.

Trotzdem werde ich mich mit der richtigen Verwendung von config PINx.y und config PORTx.y noch eingehend beschäftigen müssen - ich stoße immer wieder auf widersprüchliche Codes im web.

Grüße
wobo
 
Hi Wobo,

die Codes aus dem Netz würde ich nicht zusammensuchen, da weisst Du ja nie, ob richtig programmiert wurde und was der Autor sich dabei gedacht hat; je nach Auskommentierung. Hier im Forum wurden schon mehrfach die Einsteigerbücher beschrieben. Zu deren Gebrauch - drei sind es: Kühnel, Walter, Meisner - ist unbedingt zu Raten, auch wenn sie Geld kosten. D. h., die deutsche Bascom- Übersetzung von Meisner kann weggelassen werden.
 
Hi Grandpa,

den Kühnel und den Stefan Hoffmann hab ich. Hoffman hat viele Beispiele, auf denen man ganz gut aufbauen kann - daher finde ich ihn gut. Der Meissner ist gar kein so schlechter Tip weil ich bei BASCOM auf noch etwas hänge. Den schau ich mir auch mal an - danke.:)

Grüße
wobo
 
ja, gerne. Der Roland Walter führt auch sehr gut in die µC- Welt ein. Sein Board brauch man nicht unbedingt.
Im Mikrokontroller.net gibt es ein richtiges Tutorial. Da hab ich angefangen, mir einen Teil des Grundwissens anzueignen. Aber auch unser Dino hat sich mit seinem Tutorial viel Mühe gemacht. Lesen lohnt sich auf jeden Fall.
 
Hallo Grandpa,

kannst Du mir bei Gelegenheit vielleicht mal einen Link von Dinos Tutorial schicken, das habe ich im Forum noch nicht gefunden.

Grüße
wobo
 
Hi Wobo,

kannst Du mir bei Gelegenheit vielleicht mal einen Link von Dinos Tutorial schicken, das habe ich im Forum noch nicht gefunden.
Schau einfach mal in den FAQ-Bereich. Da ist ein Inhaltsverzeichnis gleich am Anfang mit Links zu interessanten Themen hier im Forum.

Auch empfehlenswert ist die Tutorialseite vom Roboternetz - RN-Wissen
Da ist auf der linken Seite ein Inhaltsverzeichnis mit vielen Bereichen (Bascom, Mechanik, Sensoren, Assembler, Elektronik, ...)

Bei Mikrocontroller.net gibts auch ne Menge Infos und Tutorials. Auch für C und Elektronik und und und ...

Das sollte zum lesen erstmal reichen ...

Gruß
Dino
 
Hi,

warste mal wieder schneller...
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)