Forum: Mikrocontroller und Digitale Elektronik Pic16f627a in c Ausgang ansteuern und blinken


von alphi h. (sada)


Angehängte Dateien:

Lesenswert?

Hallo ich habe das Problem , dass ich den Pic gebrannt habe aber wenn 
ich ihn an 5V lege passiert am RB0 garnichts vlt weiss ja jemand von 
euch an was es liegen könnte.


//
// PIC16F627A
//
// toggle an LED on port RB0 with about 2Hz
//

// include PIC header
#include <pic.h>


// variable
 int t = 0;

// main method
void main (void)
{

  // configuration word
  __CONFIG(0x3f71);

  // IO settings
  #define LED RB0
  TRISB0 = 0;

  // main loop
  while (1)
  {

    // toggle LED
    LED != 1;

    // wait for about .25s
    for (t = 0; t < 1000000; t++)
     {
      NOP();
    }

  }

}

von kaplic (Gast)


Lesenswert?

danilo S. schrieb:

>     // toggle LED
>     LED != 1;


Hallo Danilo,

ich glaube die o.a. Zeile funktioniert so nicht. Der Operator überprüft 
auf Ungleichheit. Negation mit Zuweisung wie man es von += kennt gibt es 
glaube ich nicht!

Ich kenne mich zwar mit PICs nicht aus, aber ich denke man kann auch 
nicht direkt auf einzelne Pins zugreifen, sondern nur auf ganze Ports. 
Deshalb wird

>// IO settings
>  #define LED RB0
>  TRISB0 = 0;

auch nicht funktionieren.

von alphi h. (sada)


Lesenswert?

oke ich habe den Code abgeändert jetzt ist nur noch
while(1)
{
LED =1 ;

}

nun leuchtet die LED für 5s dann schaltet sie für immer aus
nehm ich die Spannung weg und tu sie wieder dran kommt die led wieder 
für ca 3s und dann erslisht sie wieder. an wass kann das liegen?

vielen dank

von Sebastian Hepp (Gast)


Lesenswert?

Ich würde mal den RESET Pin beschalten

von alphi h. (sada)


Lesenswert?

ah oke meinst du wegen dem ist das mit dem unkontrollierten abschalten 
der LED?

wie soll ich den diesen beschalten?

von alphi h. (sada)


Lesenswert?

hat geklappt vielen dankt...diese zum glück gibt es dieses Forum einfach 
einsame Spitze.

von rmf (Gast)


Lesenswert?

noch so ein Tip am Rande:
du hast für t eine Int Variable angelegt. Die wird von den mir bekannten 
Compiler (CCS PCM) als 16Bit Variable verstanden.
Das passt so garnicht zu Deiner Zeitschleife mit Abfagewert 1000000.
Je nach Compiler gibt das Chaos.

Udo

von Frank K. (fchk)


Lesenswert?

kaplic schrieb:
> danilo S. schrieb:
>
>>     // toggle LED
>>     LED != 1;

Du willst LED^=1; Schreiben. ^ ist das Exklusiv-Oder in C.
Oder LED = ~LED; ~ ist das bitweise nicht, ! das logische nicht.

fchk

von Michael S. (rbs_phoenix)


Lesenswert?

danilo S. schrieb:
> // configuration word
>   __CONFIG(0x3f71);
>
>   // IO settings
>   #define LED RB0

Es scheint auch so zu funktionieren, doch das "__CONFIG.." und das 
define würde ich nach oben (direkt unter dem include) und außerhalb der 
main machen.


danilo S. schrieb:
> // wait for about .25s
>     for (t = 0; t < 1000000; t++)
>      {
>       NOP();
>     }

Abgesehen davon, dass wie erwähnt ein int mit höchstwarscheinlich 16bit 
zu klein für 1.000.000 ist, haben sogut wie alle Compiler 
Funktionen/Libs, die sie mitbringen, und wenn sie das tun, ist da auch 
sehr warscheinlich eine Warte-Funktion dabei. Dann kannst du auch sowas 
wie "delay_ms(250);" schreiben. Ist kürzer, "besser" als Wartefunktion 
zu erkennnen und du brauchst die t Variable nicht mehr.


Dann drittens hast du keine Taktquelle. Ich sehe auf dem Board keinen 
Quarz o.ä. und den Internen Oscillator schaltest du auch nicht an. Das 
kann garnicht funktionieren. Also es fehlt auf jedenfall noch ein 
Widerstand am MCLR und ein Quarz mit 2 C's oder du musst den Internen 
Oscillator anschalten. Zu beidem findest du im Datenblatt, wie es geht.

von alphi h. (sada)


Lesenswert?

danke für die Tipps. Ja das Foto habe ich ganz am anfang meiner Probleme 
gemacht. Der MCLR habe ich mittlerweile angeschlossen. Zur Taktquelle 
die habe ich in der Konfiguration eingeschaltet so brauche ich keinen 
externen Takt. Jetzt läufts auch wie es sollte. und das mit den 1000000 
war weil ich dachte 16000 sind zu schnell erreicht dass ich es gar nicht 
blinken sehe. Wurde nachträglich auch noch geändert.

Config und define werde ich noch aus dem main nehen.

wo kann ich nachschauen welche Funktionen mein Compiler mitbringt? ich 
benutze den HI-TECH ANSI C Compiler.

von Michael S. (rbs_phoenix)


Lesenswert?

http://ww1.microchip.com/downloads/en/DeviceDoc/manual_PICC_983.pdf , 
Seite 176.

Dort steht, wie man es benutzt. Dazu musst du die htc.h einbinden, da es 
dadrin steht. Und dann kannst du auch gleich da mal rein gucken, was es 
noch so darin gibt.

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.