Pic16f627a in c Ausgang ansteuern und blinken

OP #2773519
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();
    }

  }

}
Angehängte Dateien:
Gast #2773561
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.
Gast #2773641
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
#2774444
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.
OP #2774632
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.

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