Forum: Mikrocontroller und Digitale Elektronik 500Hz mit PIC ausgeben


von Max D. (maxime)


Lesenswert?

Hallo Leute,

ich will mit meinen PIC (16F887) für 30 Sek. 500Hz an RE2 ausgeben.
Hier ist mein kleines Programm, ich finde den Fehler nicht, denn am 
Oszilloskop liegt einfach keine Frequenz an.
1
uint i ;  
2
void init(void)
3
{
4
  TRISE = 0b00000000;
5
}
6
void main(void)
7
{
8
  init();
9
  RE2 = 0;
10
  for ( i = 0 ; i<30000 ; i++ )
11
  {
12
  RE2 = ~RE2 ;    
13
  __delay_ms (1);
14
  }
15
    SLEEP() ;
16
  }

Könnt ihr mir bitte helfen?

Gruß

von Überfragter (Gast)


Lesenswert?

A: mit welchem Compiler arbeitest du
B: ein Write Befehl macht das sicher zuverläßiger als ein Eingabebefehl 
;-)

Ü.

von Max D. (maxime)


Lesenswert?

Überfragter schrieb:
> A: mit welchem Compiler arbeitest du
HI-TECH C
> B: ein Write Befehl macht das sicher zuverläßiger als ein Eingabebefehl
Ich kenne leider nicht den Unterschied :o

von Jens M. (Gast)


Lesenswert?

Max D. schrieb:
> denn am Oszilloskop liegt einfach keine Frequenz an.

Bei Pic meist I/O Port Konfiguration

Komparatoren aus?
A/D Wandler aus ?
Sonst. I/O Funktionen aus die am Pin liegen?

Endlosschleife wäre auch nicht schlecht am Anfang

von Martin S. (drunkenmunky)


Lesenswert?

Sieht mal nach Hi-Tech Compiler aus...

Wenn du die __delay_ms verwenden willst, musst du den CPU Takt 
definieren, ich glaub mit XTAL oder so. Steht im Compiler Handbuch. 
Müsste eigentlich ne Warnung oder Fehler erscheinen.

Sonstige Pinfunktionen müssten nach Power on eigentlich aus sein. Bei 
Ausgang müsste auch die Einstellung Analog/digital egal sein, wenn der 
Pin ein Analogeingang ist.

Den Pin würde ich mit einer XOR Verknüpfung mit 1 toggeln:
RE2 ^= 1;

Sonst erst mal probieren den Ausgang dauerhaft auf High zu schalten. 
Erstmal klein anfangen...

Hast du Anzeichen dafür, dass irgendwas läuft? Was für einen Takt 
verwendest du?

von Martin S. (drunkenmunky)


Lesenswert?

Ah, ja. Du hast den Oszillator ja gar nicht initialisiert. Musst du mal 
schauen, wie der nach Power on reset eingestellt ist und ggf. wie 
gewünscht einstellen.

von Max D. (maxime)


Lesenswert?

Dankeschön Leute für eure Hilfe,
habe jetzt statt RE2, einfach RD0 genommen und alles klappt wunderbar :v

Kann es sein das irgendwas anders ist mit den RE Pins?

von Frank M. (frank_m35)


Lesenswert?

Ein Blick ins Datenblatt:
http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf

verrät, RE2 ist standardmäßig als Analogen Pin geschalten. Um ihn als 
digitalen I/O zu verwenden musst du die Analoge Funktion am Pin 
deaktivieren.

P.S: So ein 500Hz Signal lässt sich auch leicht per PWM realisieren 
(Kapitel 11), dadurch kann es im Hintergrund laufen.

von Michael S. (rbs_phoenix)


Lesenswert?

Sollte ansich aber auch mit dem RE2 funktionieren. Du misst auch am 
richtigen Pin und dieser ist nicht versehentlich mit Masse verbunden?

von Martin S. (drunkenmunky)


Lesenswert?

Frank M. schrieb:
> Ein Blick ins Datenblatt:
> http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf
>
> verrät, RE2 ist standardmäßig als Analogen Pin geschalten. Um ihn als
> digitalen I/O zu verwenden musst du die Analoge Funktion am Pin
> deaktivieren.

Wie ich bereits geschrieben habe, wird das nicht die Ursache für das 
Problem sein:

"The state of the ANSEL bits has no affect on digital output
functions. A pin with TRIS clear and ANSEL set will
still operate as a digital output."

Tippe da auch eher auf ein Hardwareproblem.
Vielleicht zeigst du mal einen Schaltplan und ein Foto vom Aufbau.

von Ingo (Gast)


Lesenswert?

Also ich bin auch in diese Falle getappt, sprut nennt das Analogfalle:
http://sprut.de/electronic/pic/fallen/fallen.html#analog

von Frank M. (frank_m35)


Lesenswert?

Martin S. schrieb:
> Frank M. schrieb:
>> Ein Blick ins Datenblatt:
>> http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf
>>
>> verrät, RE2 ist standardmäßig als Analogen Pin geschalten. Um ihn als
>> digitalen I/O zu verwenden musst du die Analoge Funktion am Pin
>> deaktivieren.
>
> Wie ich bereits geschrieben habe, wird das nicht die Ursache für das
> Problem sein:
>
> "The state of the ANSEL bits has no affect on digital output
> functions. A pin with TRIS clear and ANSEL set will
> still operate as a digital output."
>
> Tippe da auch eher auf ein Hardwareproblem.
> Vielleicht zeigst du mal einen Schaltplan und ein Foto vom Aufbau.

Vielleicht liegt es daran, dass er nicht direkt dem Ausgang einen Status 
zweist, sondern über ein NOT Operator und daher der Analoge Modus einen 
Einfluss darauf hat.
Da es an einem anderen Pin, ohne Analoge Funktionalität, problemlos 
funktioniert, denke ich schon, dass er die Pins richtig angeschlossen 
hat und richtig verwendet.

von Michael S. (rbs_phoenix)


Lesenswert?

Aber nicht wenn er ne Lötbrücke zum Vdd Pin nebenan oder zum Vss Pin 
gegenüber hat. Oder wenn er bei einem Streifenraster die eine 
Unterbrechung vergessen hat. Ein Foto, Schaltplan und/oder nochmal 
genauere Beschreibung vom Oszibild (Spannung, bewegt er sich vlt ein 
paar mV,...)

Bei mir funktionierte das ~= bisher immer. Und beim anderen Pin gehts ja 
auch. Und analoger Eingang spielt keine rolle, da er das TRISE register 
ja nicht mehr anrührt.

von Max D. (maxime)


Lesenswert?

Ja eben, bei allen anderen hat es ja funktioniert, nur bei TRISE nicht.
Kann leider kein Foto mehr machen da ich den Baukasten mit den PIC nicht 
mehr habe (hab es von der Schule ausgeliehen gehabt).

Daraus folgt meine nächste Hürde..
Ich will mir jetzt selber eine kleine Schaltung aufbauen mit den 
PIC16F887 um meine Funktionen zu testen. Nun finde ich aber keine 
Grundschaltung oder ähnliches im Internet.

Könnt ihr mir bitte weiterhelfen?

Gruß

von Frank M. (frank_m35)


Lesenswert?

ich würde PIC16 nicht weiter verwenden. Stattdessen würde ich an deiner 
Stelle dessen Nachfolger, den PIC18 verwenden. (leistungsfähiger, 
umfangreicher, suche dir am besten ein Modell mit einem internen 
Schwingkreis sodass du keinen Quarz zwingend brauchst)
Da du den PIC ja irgendwie auch programmieren musst, also einen 
Programmer brauchst, ist es das einfachste du besorgst dir ein 
Starterkit das alles enthält, bspw. eines davon:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2807&devicefamilyid=2238
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2519&param=en025315&page=wwwPICmicroDemo

In deinem Fall vielleicht:
DV164131  - PICkit 3 Debug Express
http://www.microchipdirect.com/productsearch.aspx?Keywords=DV164131
beinhaltet Leiterplatte mit PIC18 mit leicht zugänglichen Pins, und den 
PicKit 3 ICSP Programmer.

Den dort verwendeten Pic gibt es auch mit Steckkontakten um ihm auf 
einem Steckbrett aufzubauen

Je nachdem wie groß dein Budget ist, dein Vorwissen und wie weit du 
gehen willst, kannst du auch auf PIC24 gehen und das
http://www.microchipdirect.com/ProductSearch.aspx?Keywords=DV164037
zusammen mit dem Buch http://flyingpic24.com/ kaufen. Was ähnliches gibt 
es auch für PIC32.
Bei beiden liegt der Schwerpunkt jedoch eher im Bau komplexerer Systeme, 
mit Grafikdisplay, Sensoren, Ein- Ausgabe,  ...

Ich denke das was du machen willst (kleinen Schaltungen auf dem 
Steckbrett, kleine Steuerungen, ...) wird mit dem PIC18 besser möglich 
sein


Schau auch mal auf http://www.sprut.de/ zu PIC Schaltungen und 
Erklärungen.

von Max D. (maxime)


Lesenswert?

Hallo Frank,

Dankeschön für deine Hilfe, aber wir müssen den PIC16 verwenden. Ist 
eine Voraussetzung von diesen Projekt.

Ich bräuchte also erstmal eine Grundschaltung zu diesen PIC, habe auch 
bei sprut.de etwas durchgestöbert..

von Martin S. (drunkenmunky)


Lesenswert?

Beschaltung braucht man nicht viel. Ein Pull up Widerstand am MCLR 
(braucht man nicht bei jedem, schadet aber auch nicht) und ein 100nF 
Kondensator an der Versorgungsspannung. Wenn du den internen Oszillator 
benutzt, so wie in deinem Programm auch, brauchst du keinen Externen. 
Stromversorgung für 5V brauchst du dann noch, kannst aber auch direkt 
vom Schaltnetzteil nehmen.

Ein Debugger wie das Pickit 3 ist sicherlich eine gute Investition. Den 
Rest kann du auf einem Steckbrett aufbauen.

von Max D. (maxime)


Lesenswert?

Ja danke habe es jetzt geschafft für meine Zwecke :D

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.