-
        

Ergebnis 1 bis 10 von 10

Thema: pic18f8722... warum blinkt die led nicht?

  1. #1

    pic18f8722... warum blinkt die led nicht?

    Anzeige

    hallo leute,
    ich bin der absolute pic noob und versuche gerade den einstieg.

    weiss jemand warum der ausgang bzw die led nicht blinkt?




    #include <p18f8722.h>
    #include "delays.h"

    #pragma config WDT = OFF // ON|OFF watchdog timer
    #pragma config LVP = OFF // ON|OFF low voltage programming
    #pragma config MCLRE = OFF // ON|OFF external reset
    #pragma config OSC = INTIO67 // LP|XT|HS|RC|EC|ECIO6|HSPLL|RCIO6|INTIO67|INTIO7


    void ConfigOSC(void)
    {
    OSCCON &= !0x70;
    //set bits
    OSCCON |= 0x70; // internal oscillator freq 8MHz
    //OSCCON |= 0x60; // internal oscillator freq 4MHz
    //OSCCON |= 0x50; // internal oscillator freq 2MHz
    //OSCCON |= 0x40; // internal oscillator freq 1MHz (default after reset)
    //OSCCON |= 0x30; // internal oscillator freq 500kHz
    //OSCCON |= 0x20; // internal oscillator freq 250kHz
    //OSCCON |= 0x10; // internal oscillator freq 125kHz
    //OSCCON |= 0x00; // internal oscillator freq 31kHz
    // Set PLL
    OSCTUNE |= 0b01000000; // set PLLEN bit (FREQ * 4) (only for 8MHz or 4MHz)
    }



    void main(void)
    {
    ConfigOSC;

    LATB = 0x00;
    TRISB = 0xFE;

    while(1)
    {
    LATB = 1;
    Delay10KTCYx(250);
    LATB = 0;
    Delay10KTCYx(250);
    }
    }




    gruss, marc

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    07.07.2007
    Beiträge
    48
    Hallo. Ich bin selber noch Anfänger und versuch mich damit herum zu schlagen. Programmier aber erst Assembler und kann deshalb nicht richtig denn code lesen denn du da geschrieben hast. Ich glaube es liegt aber an dem LATB. Soweit ich weis ist das ein Register in dem man den Zustand der PORTs auslesen kann. Deshalb bringt dir dieser Befehl in deinem Code nichts. Du musst den Befehl PORTB benutzen. Wenn es nichts bringt dann ist vielleicht etwas an deinem Code falsch. Du kannst aber jede menge im Datenblatt deines PICs herausfinden: http://www.microchip.com/stellent/id...cName=en010327

    Hoffe habe dir geholfen.

    Gruß frank

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    988
    hm selber programier ich auch nur in ASM aber ich glaube es mus LATB,x = y heissen
    Legastheniker on Bord !

    http://www.Grautier.com - Projektseite
    http://www.grautier.com/wiki/doku.php?id=bt-index - BT-BUS

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo mamba!

    Ich kenne C auch nicht, aber es müsste anstatt LATB, PortB sein. Laut TRISB die LED ist an B0 angeschlossen.

    MfG

  5. #5
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo mamba!

    Ich kenne C auch nicht, aber es müsste anstatt LATB, PORTB sein. Laut TRISB die LED ist an B0 angeschlossen.

    MfG

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    30
    Beiträge
    150
    Hallo Marc!

    Also damit hab ich mich auch mal rumgeschlagen. Aber ich versuchs mal ziemlich einfach zu machen.

    Das
    #pragma config OSC = INTIO67 // LP|XT|HS|RC|EC|ECIO6|HSPLL|RCIO6|INTIO67|INTIO7
    kenn ich nicht. ich würd ganz einfach schreiben, wenn du den internen Oszillator verwenden willst:
    #pragma config FOSC = INTOSC_XT

    Dann kannst du das ganze mit den ConfigOSC rausgeben.
    Also weg mit ConfigOSC im ProgrammCode.

    Dann musst du noch vor void main(void) #pragma code einfügen. Damit beginnt dann der Code.
    Und das LATB=0x00 passt schon, damit setzt du nur den Ausgang mal auf 0, find ich zwar komisch weil du erst später den Ausgang deklarierst aber das macht nix. Du kannst auch schreiben LATB=0; Und das TRISB ist dazu da, dass du den PortB als Ausgang setzt. Aber da kannst du ganz einfach schreiben TRISB=0; bei =1 hättest du das ganze Register zu nem Eingang gemacht. So das sollte mal reichen. Damit sollte deine LED blinken.

    würd mich über ne freudige Meldung freuen!

    lg,
    Norbert

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    24.01.2007
    Beiträge
    53
    Hallo mamba,

    ich hab mir deinen Code mal angeschaut, ich programmier zwar nur Pic 16Fx, aber über das Register LATB kannst du nur den Zustand abfragen, aber nicht den Zustand ändern. Den Zustand kannst du nur über das Portx Register. Also zum Beispiel:
    PORTB = 0x03; --> der Ausgang 2 am PortB gibt ein High Signal aus
    RB2 = 1; --> hat die selbe Bedeutung

    Jedoch ist es wichtig, was du eh richtig gemacht hast, dass du den gewünschten Ausgang als Input oder Output definierst.

    Viel Erfolg..

    lg michael

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    30
    Beiträge
    150
    Also Michael!

    Ich weiß nicht genau, aber ich denke es ist genau umgekehrt. Über PORTB fragst du ab, und über LATB schreibst du was raus.

    lg
    Norbert

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    24.01.2007
    Beiträge
    53
    Hallo Norbert,

    Jetzt bin ich erstaunt, kann man mit beiden Registern den Ausgangswert ändern???

    Ich hab bis jetzt immer mittels PORTx Register den Ausgangswert geändert und mittels LATx den Zustand abgefragt.

    Ich hab gerade einen relativ neuen PIC, den 16F884 und der besitzt gar kein LATx Register mehr, jedoch mein alten jedoch schon...

    Gibt es dieses Register nicht mehr???

    @mamba:
    Was natürlich auch noch sein kann ist, dass es zu schnell blinkt, hast du schon mit einem Oszi nach gemessen.
    Denn meine ersten Probleme waren immer die Zeitschleifen und ihre Verzögerungen....

    lg michael

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.08.2004
    Ort
    Verden (bei Bremen)
    Alter
    30
    Beiträge
    247
    Hi

    ich weiß net aber müsste hier net noch ne leere klammer rein?

    void main(void)
    {
    ConfigOSC; <<---- ConfigOSC(); (??)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •