Forum: Mikrocontroller und Digitale Elektronik pic12F508 I/O Pins Denkfehler?


von Malte K. (mallatomalla)


Lesenswert?

Moin moin,
ich beschäftige mich schon etwas länger mit PIC´s, allerdings blieb dies 
bis jetzt nur auf den 16F84 beschränkt. Habe nun ein kleines projekt in 
dem Ich einen 12F508 benutzen möchte.
Zur programmierung des Pic´s benutze ich das Pickit 2. Als Programm 
MPLAB 8.40 und zum complieren den cc5x.
Da ich zum ersten mal per ICSP programmiere habe ich ein Adapterkabel 
und eine kleine programmierplatine erstellt um den PIC mit dem 
Programmer zu verbinden. Das ist so weit glaube ich auch in Ordnung.
Als erstes wollte ich alle I/O Pins auf Output stellen und an jedem 
einen High pegel liegen haben.
Nun kommt das was ich mir net erklären kann. Wenn ich folgendes in C 
eingebe:

#include <C:\cc5\12F508.h>    // Prozessor-Typ definieren
void main(void)        // Start des Hauptprogramms
{
TRISGPIO = 0b.0000.0000;    // Alle Pins sind Ausgänge
GPIO = 0b.0011.1111;            // Alle High-Pegel
}

Kommt als .asm folgendes heraus:

  processor  12F508
  radix  DEC

PORTB       EQU   0x06
GPIO        EQU   0x06

  GOTO main

main
                  ;TRISGPIO = 0b.0000.0000;// Alle Pins sind Ausgänge
  MOVLW 0
  TRIS  PORTB
      ;GPIO = 0b.0011.1111;// Alle High-Pegel
  MOVLW 63
  MOVWF GPIO
  SLEEP

  END

Wenn ich nun mein PIC Programmiere passiert garnix, MPLAB sagt alles ist 
in Ordnung.
Ich gehe mal davon aus das etwas an dem code nicht stimmt.
Wenn ihr nen tipp für mich habt wäre ich dankbar.
Mfg.

von Maik (Gast)


Lesenswert?

Öhm... Was macht dein Prozessor denn danach?!

Wo ist Endlosschleife?!

von holger (Gast)


Lesenswert?

Pronbiers mal so:

#include <C:\cc5\12F508.h>    // Prozessor-Typ definieren

#pragma config |=0b11001

void main(void)        // Start des Hauptprogramms
{
TRISGPIO = 0b.0000.0000;    // Alle Pins sind Ausgänge
GPIO = 0b.0011.1111;            // Alle High-Pegel
}

von holger (Gast)


Lesenswert?

>Pronbiers mal so:

Wie kommt denn das n da rein? Scheiß Hitze, blöde Laptoptastatur;)

von Lehrmann M. (ubimbo)


Lesenswert?

du jagst den PIC ja sofort wieder in den Reset nachdem das Programm 
einmal durchgelaufen ist.

Endlosschleife fehlt !
Dann wären die Config-Bits noch interessant und verifizier mal das auf 
den PIC geschrieben.

Wie sieht's mit Taktquelle aus ?!

von holger (Gast)


Lesenswert?

>Wie sieht's mit Taktquelle aus ?!

Autsch.

#pragma config |=0b11010

Für INTRC;)

von Malte K. (mallatomalla)


Lesenswert?

Danke für eure Hilfe.
Habe die config nun innerhalb meines codes erstellt, MPLAB hat es trotz 
der entsprechenden Einstellung nicht selber gemacht.
Bleibt bei mir noch eine Frage offen.
Kann ich den PIN Nr.2 GP2/TOCKI als normalen Output benutzen?
Wenn ja, muss noch etwas spezielles umgestellt werden, im mom bekomm ich 
kein high pegel mit ihm erzeugt, alle anderen funktionieren.
MFG

von holger (Gast)


Lesenswert?

>Kann ich den PIN Nr.2 GP2/TOCKI als normalen Output benutzen?

Ja. GP3 kann nur ein Input sein.

von Malte K. (mallatomalla)


Lesenswert?

Wenn ich den oben angegeben code brenne, dann schwankt GP2 zwischen 
Spannungen von 0.2 bis 2V ... hat jemand eine erklärung dafür?
Muss ich zwecks GP2/TOCKL noch was umstellen?
Hab den Pic schon ausgetauscht weil ich dachte er sei defekt.
MFG

von holger (Gast)


Lesenswert?

>dann schwankt GP2 zwischen
>Spannungen von 0.2 bis 2V

Bist du sicher das du nicht an GP3 misst?

von Malte K. (mallatomalla)


Lesenswert?

jop, GP3 liegt aus relativ konstanten 0,7V. Das dürfte als 
unbeschalteter Input ja auch in ordnung sein.

von Stephan S. (uxdx)


Lesenswert?

Malte K. schrieb:
> Kann ich den PIN Nr.2 GP2/TOCKI als normalen Output benutzen?

Pin Nr. 2 ist NICHT GP2, sondern GP5

GPO bis GP2 und GP4 bis GP5 sind Input/Output (per TRIS-Befehl 
einstellbar), GP3 (Pin 4) ist immer Input, egals was Du beim TRIS-Befehl 
sagts.

von Malte K. (mallatomalla)


Lesenswert?

Sorry, ich meine natürlich Pin Nr. 5.
Schaffe es einfach nicht einen High Pegel damit zu erzeugen, ist nun 
auch nicht weiter schlimm, weil ich den auch als Input Pin benutzen 
kann... das funktioniert ohne Probleme.
Ich hab zwar immer noch keine Ahnung warum sich GP2 nicht auf high 
schalten lässt aber danke euch trotzdem für eure Hilfe.
Falls jemand doch noch einen Gedankenblitz hat, warum GP2 nicht will 
kann er ja nochma schreiben.
Mfg

von Stephan S. (uxdx)


Lesenswert?

Probier's doch mal mit MPLAP direkt in Assembler ...

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.