500Hz mit PIC ausgeben

OP #3093076
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ß
#3093120
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?
#3094056
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.
#3094198
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.
#3094427
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.
OP #3102948
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ß
#3103083
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.
#3103465
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.

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