PIC12F675 - Port-IO in C

OP #7464712
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?

Angehängte Dateien:
#7465200
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

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

OP #7465452
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.

#7465460
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

#7465486
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. :)

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

OP #7465649
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".

#7465691
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 😄

OP #7465727
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.

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

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