Forum: Mikrocontroller und Digitale Elektronik PIC12F675 - Port-IO in C


von Werner G. (werner_gw)


Angehängte Dateien:

Lesenswert?

Hallo zusammen.

Ein kleiner PIC 12f675 treibt mich gerade zur Verzweiflung.
Ich versuche schon den halben Tag (mit 3 verschiedenen Compilern) den 
Pegel eines Eingangspins auf einen Ausgangspin auszugeben.

Mein SourceCode (hier für den XC8 Compiler): >>> siehe Anhang

Nach meinem Verständnis sollte ich am Pin GPIO5 den Pegel sehen, den ich 
an GPIO0 anlege. Funktioniert aber nicht.

Hat jemand eine Idee?

von Frank K. (fchk)


Lesenswert?

In der Initialisierung fehlt ein ANSEL = 0; Die Pins sind defaultmäßig 
auf Analog eingestellt, man muss sie ausdrücklich auf Digital setzen, um 
GPIO-Pins über das GPIO-Register lesen zu können.

fchk

von Werner G. (werner_gw)


Lesenswert?

Hallo Frank,

danke für den Tip.
Jetzt habe ich das Phänomen, dass es funktioniert, wenn ich GPIO2 als 
Eingang verwende. Mit GPIO0 und GPIO1 funktioniert es nicht. Ich hab's 
auch schon mit einem brandneuen Baustein versucht mit dem gleichen 
Ergebnis.
Fällt Die da noch was ein?

von Werner G. (werner_gw)


Lesenswert?

.. ich hab' jetzt gerade mal umkonfiguriert.
Wenn ich GPIO0 als Ausgang und GPIO5 als Eingang konfiguriere, dann 
funktioniert's auch!??

von Frank K. (fchk)


Lesenswert?

Werner G. schrieb:
> Hallo Frank,
>
> danke für den Tip.
> Jetzt habe ich das Phänomen, dass es funktioniert, wenn ich GPIO2 als
> Eingang verwende. Mit GPIO0 und GPIO1 funktioniert es nicht. Ich hab's
> auch schon mit einem brandneuen Baustein versucht mit dem gleichen
> Ergebnis.
> Fällt Die da noch was ein?

CMCON = 7;

Das schaltet den analogen Komparator ab.

fchk

: Bearbeitet durch User
von Werner G. (werner_gw)


Lesenswert?

Hallo Frank,
jetzt funktioniert's.
Danke für Deine Hilfe!
Ist schon etwas kontraintuitiv, dass man die Sonderfunktionen aktiv 
ausschalten muss.

von Toxy T. (toxy_t)


Lesenswert?

Werner G. schrieb:
> Ist schon etwas kontraintuitiv, dass man die Sonderfunktionen aktiv
> ausschalten muss.

Was heisst hier kontraintuitiv?
Es ist ein uC mit gerademal 8 Pins und einen Haufen interner 
Peripherie.Welche Peripherie aktiviert oder welche Grundeinstellung 
vorhanden sein soll ist dem Chiphersteller ueberlassen.Das Datenblatt 
sollte IMMER vorhanden sein,wenn man wissen moechte wie die Schalter 
stehen muessen um die gewuenschte Funktion zu erreichen.Wie bei einem 
Stellwerk der Bundesbahn.Nur das dort eine Fehleinstellung einer 
Katastrophe gleichkommt....
Der Pic12F675 ist uebrigens schon aelteren Datums und kostet garantiert 
mehr als der wesentlich "bessere" und neuere pinkompatible Pic12F1840.
Bei Reichelt bekommst du Microchip uCs ziemlich guenstig - guenstiger 
aufjedenfall als auf Ebay.
Das Datenblatt gibt es gratis dazu 😉

Du kannst natuerlich auch das MCC verwenden und Code automatisch 
generieren lassen - ich selbst lese gerne und setze Bits selbst.
Das MCC ist ja in der MPLAB X - IDE integriert.Aeltere uCs werden zur 
Zeit noch nicht unterstuetzt - wohl aber der Pic12F1840
=================================================================
MPLAB® Code Configurator (MCC) is a free graphical programming 
environment that generates seamless, easy-to-understand C code to insert 
into your project.
=================================================================

von Werner G. (werner_gw)


Lesenswert?

.. auf den "wertvollen" Hinweis, dass es neuere Bausteine die besser und 
dazu noch billiger sind habe ich schon die ganze Zeit gewartet.
Wenn ich Zeit und Muße habe, kann ich mir natürlich das Datenblatt 
zuerst mal durchlesen. Ich glaube so schlau sind wir hier alle.
Bevor ich eine Leiter hinaufsteige kann ich natürlich erst mal die 
Bedienungsanleitung lesen, weil dort ja drinstehen könnte, dass die 6. 
und 9. Sprosse zuerst festgeschraubt werden müssen bevor man die Leiter 
benutzt.
Das widerspräche allerdings meiner Intuition weil ich die Erfahrung mit 
vielen anderen Leitern gemacht habe, dass man davon ausgehen darf, dass 
die Leiter im "gebrauchsfertigen" Zustand die Fabrik verlässt.
Bei den Controllern mit denen ich bisher gearbeitet habe, werden die 
Sonderfunktionen nach Bedarf konfiguriert und aktiviert. Ein (besonders 
kreativer) Hersteller kann das zwar alles auf den Kopf stellen, nur ist 
es dann (zumindest für mich) nicht mehr intuitiv. Wahrscheinlich kennst 
Du nur µCs von Microchip.
Und ich habe durchaus Gründe weshalb ich gerade den 12f675 ausgewählt 
habe.
Hättest Du zum Thema einen inhaltlichen Beitrag leisten können, hättest 
Du das ja sicher getan.

von Frank K. (fchk)


Lesenswert?

Werner G. schrieb:
> Hallo Frank,
> jetzt funktioniert's.
> Danke für Deine Hilfe!
> Ist schon etwas kontraintuitiv, dass man die Sonderfunktionen aktiv
> ausschalten muss.

Microchip hat sich schon was dabei gedacht.

Digitale Signale sind entweder low (unterhalb von VLo) oder High 
(oberhalb von VHi). Der Bereich dazwischen ist undefiniert und kann 
unter Umständen zu unzulässig hohen Querströmen in der Eingangsstufe 
führen. Deswegen soll man ja auch unbenutzte digitale Pins niemals offen 
lassen, sondern entweder per Pullup oder Pulldown auf einen definierten 
Wert legen, oder als Ausgang programmieren.

Wenn Du aber die Analogfunktionen (ADC oder Komparator) nutzen willst, 
dann ist die Bedingung für digitale Signale, dass die Spannung nicht in 
diesem undefinierten Bereich liegen darf, ausdrücklich nicht mehr 
gegeben. Deswegen ist es sinnvoll, beim Start vorsichtshalber alles auf 
Analog stehen zu haben und dann per Software auf digital umzuschalten. 
Das ist übrigens bei allen PICs so.

fchk

von Christian M. (christian_m280)


Lesenswert?

Wie undankbar von Dir!

Gruss Chregu

von Motopick (motopick)


Lesenswert?

> Deswegen ist es sinnvoll, beim Start vorsichtshalber alles auf
> Analog stehen zu haben und dann per Software auf digital umzuschalten.

Ja wenn der 12F629 nur nicht waere. :)
Das ist quasi ein 12F675 ohne ADC.
Der muss ohne die "sinnvolle" Analogunterstuetzung starten.
Voll schlimm!

> Ist schon etwas kontraintuitiv, dass man die Sonderfunktionen aktiv
> ausschalten muss.

Ja. Ist es. Aber:

> Das widerspräche allerdings meiner Intuition

Fuer Intuition kann man sich bei der Konfiguration nichts kaufen.
Und:
> Das ist übrigens bei allen PICs so.

Es gibt, glaube ich, sogar im Datenblatt des 12F675 einen Extrahinweis
auf diesen Umstand. Das sollte man also immer lesen.


> Bei Reichelt bekommst du Microchip uCs ziemlich guenstig - guenstiger
> aufjedenfall als auf Ebay.

Den 12F675 bekam man dort (Ebay) lange Zeit fuer 30 Ct im Zehnerpack.
Und Gratisversand "dank" Chinas Entwicklungslandstatus. :)

: Bearbeitet durch User
von Stephan S. (uxdx)


Lesenswert?

Motopick schrieb:
> Den 12F675 bekam man dort (Ebay) lange Zeit fuer 30 Ct im Zehnerpack.

Das hatte ich auch mal bestellt, ist schon etwas ewig her.
Keiner der PICs funktionierte, das waren alles umgelabelte OPs.

Den PIC12F1840 kann ich nur empfehlen, den und PIC16F1825 (beide auch in 
der LF-Variante) verwende ich oft für kleine Projekte.

von Motopick (motopick)


Lesenswert?

> Keiner der PICs funktionierte, das waren alles umgelabelte OPs.

Mein Beileid. Hier genau andersherum. Jeder bestellte 12F/16F
funktionierte wie erwartet. Und es waren eine ganze Menge.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Werner G. schrieb:
> Ist schon etwas kontraintuitiv, dass man die Sonderfunktionen aktiv
> ausschalten muss.

Das kommt von den ganz alten OTP-PIC, wo die Funktionen noch nicht 
umschaltbar waren. Und die einmal getroffenen Zuordnungen hat man für 
neuere Typen beibehalten, damit die codekompatibel sind.
Bei den AVRs gibt es auch solche Umstände, ein Attiny25 kann z.B. 
Binärcode des ATtiny15 ausführen, ein ATmega128 Code des ATmega103 usw.

Es war früher üblich, daß Code extern entwickelt wurde und die Sourcen 
sind entweder verschollen oder der Entwickler verstorben, aber die 
Geräte werden noch viele Jahre weiter produziert.
Auch wurde noch viel in Assembler geschrieben, wo eh kein anderer 
durchsehen kann. Code reviews, Wartbarkeit und Erweiterbarkeit waren 
noch nicht erfunden.

von Werner G. (werner_gw)


Lesenswert?

Peter D. schrieb:
> Das kommt von den ganz alten OTP-PIC, wo die Funktionen noch nicht
> umschaltbar waren. Und die einmal getroffenen Zuordnungen hat man für
> neuere Typen beibehalten, damit die codekompatibel sind

Das würde mich aber wundern, wenn der "Ur-Typ" des 12f675 (und anderer 
8-Pinner) ADC- bzw. Komperator- Eingänge gehabt hätten.
In den "alten Zeiten" war die Default-Konfiguration (i.d.R.) nach einem 
Reset, alle Pins als Eingang mit "Weak Pullups".

von Werner G. (werner_gw)


Lesenswert?

Werner G. schrieb:
> In den "alten Zeiten" war die Default-Konfiguration (i.d.R.) nach einem
> Reset, alle Pins als Eingang mit "Weak Pullups".

.. natürlich außer den VersorgungsPins, Oszillator-E/As, ResetPin, ...
die gar nicht als I/Os verwendbar waren.

von Jochen-paul S. (picfan)


Lesenswert?

Werner G. schrieb:

> In den "alten Zeiten" war die Default-Konfiguration (i.d.R.) nach einem
> Reset, alle Pins als Eingang mit "Weak Pullups".

Aha, der Hilfesuchende ist nun zum MC-Spezialisten mutiert.

von Werner G. (werner_gw)


Lesenswert?

Jochen-paul S. schrieb:
> Aha, der Hilfesuchende ist nun zum MC-Spezialisten mutiert.

.. ach, das ist für Dich schon Spezialistenwissen?
Sowas haben wir in der Grundschule gelernt.

von Toxy T. (toxy_t)


Lesenswert?

Werner G. schrieb:

> Hättest Du zum Thema einen inhaltlichen Beitrag leisten können, hättest
> Du das ja sicher getan.

Haette ich ja auch getan aber erstens hatte ich dein Posting zu spaet 
gelesen und zweitens wurde deine Anfrage ja schon beantwortet.

Ich bin von deinem Eingangsposting ausgegangen,dass du ein Neueinsteiger 
bist - sorry, dass ich den Pic12F1840 erwaehnt hatte.

Werner G. schrieb:
> .. auf den "wertvollen" Hinweis, dass es neuere Bausteine die besser und
> dazu noch billiger sind habe ich schon die ganze Zeit gewartet.

Ja dieser Hinweis war Kaese von mir - konnte ja nicht wissen, dass du 
Profi bist aber dies liess sich eben aus deinem Eingangsposting nicht so 
ohne weiteres entnehmen.
Wie dem auch sei - wenigstens mal wieder jemand der sich 
erfreulicherweise mit Pics beschaeftigt.
Mit Pics ist es hier auf diesem Forum so wie bei Windows und Linux:
Windows = Shit ,Linux = das obergenialste und fehlerloseste OS aller 
Zeiten.
Nur Dummkoepfe (wie ich) verwenden Windows und Pics 😄

von Stephan S. (uxdx)


Lesenswert?

Toxy T. schrieb:
> Nur Dummkoepfe (wie ich) verwenden Windows und Pics 😄

Und was bin ich dann ? Ich verwende fast ausschliesslich Linux (ausser 
Wine für Target3001 und eine W7-VM für MPLab 8.92) und überwiegend PICs.

: Bearbeitet durch User
von Toxy T. (toxy_t)


Lesenswert?

Stephan S. schrieb:
> Und was bin ich dann ?

Na ,auf jedenfall was besseres als ich...

von Motopick (motopick)


Lesenswert?

> sorry, dass ich den Pic12F1840 erwaehnt hatte

Ja, besser ist das. Bei Rechelt ab(!) 1.90 Eu.  In DIP ueber(!) 2 Eu.
"Preisguenstig" stelle ich mir irgendwie anders vor.

Dagegen sind die 1.10 Eu fuer einen SO8 12F675 ja geradezu ein 
Schnapper.

von Werner G. (werner_gw)


Lesenswert?

Toxy T. schrieb:
> Ich bin von deinem Eingangsposting ausgegangen,dass du ein Neueinsteiger
> bist - sorry, dass ich den Pic12F1840 erwaehnt hatte.

.. das ist ja in Ordnung.
Es hat bei mir nur einen Punkt getriggert, der mich in solchen Foren 
nervt:
Es wird ein konkretes Problem geschildert und es ist immer ein 
Schlaumeier dabei der meint: Selber Schuld wenn man mit so einem alten 
Zeug ...

Der Grund weshalb ich gerade den 12f675 verwendet habe ist, dass ich vor 
gut 15 Jahren mal ein kleines Projekt mit diesem Chip gemacht hatte und 
noch ca. 20 Stück in der Schublade habe.

von Toxy T. (toxy_t)


Lesenswert?

Werner G. schrieb:
> Der Grund weshalb ich gerade den 12f675 verwendet habe ist, dass ich vor
> gut 15 Jahren mal ein kleines Projekt mit diesem Chip gemacht hatte und
> noch ca. 20 Stück in der Schublade habe.

Ist ja auch ok.Geht mir aehnlich.Die "alten" Pics sind tadellos aber 
halt ein bischen spaerlich ausgestattet.Verwenden tue ich sie fuer 
einfache Anwendungen immer noch.

von Motopick (motopick)


Lesenswert?

> spaerlich ausgestattet

Es ist keine Schande UART, SPI und I2C in Software zu machen.
Wenn es von der Geschwindigkeit passt.

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.