Forum: Mikrocontroller und Digitale Elektronik LED 3x blinken dann LED permanent ON


von Reiner L. (reiner_l)


Lesenswert?

Hallo Forumsgemeinde,
ich habe da ein Problem von dem ich glaube es ist trivial, aber ich 
verstehe es leider nicht.
Mein Ziel ist es, wie schon die Überschrift vermuten lässt, eine LED 3x 
blinken zu lassen, danach soll die LED permanent an bleiben.

Ich habe dazu folgenden möglichst einfachen Code entworfen.

MAIN
    CLRF CCP1CON
    ; 16F628 alle Comparatoreingänge auf Digital umschalten
    ; alles in der Bank 0 auf Digital umschalten
    BSF CMCON, CM0
    BSF CMCON, CM1
    BSF CMCON, CM2

    CLRF PORTB
    BANKSEL TRISB  ; wählt PortB
    MOVLW b'00000000'  ;
    MOVWF TRISB    ; PORTB beschreiben
    BANKSEL PORTB  ; wechselt auf PortB

    ;call _SET_BrakeLight

    _Go_Main
  call _SET_BrakeLight
  ;ON für Permanent
  call _SET_BrakeON

    goto _Go_Main  ; Loop Forever


    GOTO MAIN                          ; springe wieder in die Main 
Funktion

_SET_BrakeLight
    ;1 ON LED auf RB0 einschalten
    BSF PORTB,RB1
    call _delay_1s  ; ruft Wait Funktion auf, die Funktion ist unten 
definiert und warte vorgegebene Zeit
    ;LED OFF auf RB0 ausschalten
    BCF PORTB,RB1  ; löschen LED
    call _delay_1s

    ;2 ON
    BSF PORTB,RB1
    call _delay_1s
    ;OFF
    BCF PORTB,RB1
    call _delay_1s

    ;3 ON
    BSF PORTB,RB1
    call _delay_1s
    ;OFF
    BCF PORTB,RB1
    call _delay_1s

    return

_SET_BrakeON
    BSF PORTB,RB1
    ; jetzt 1 Sekunde Warten dann erneut flashen
    call _delay_2s
    call _delay_2s

    return

Wie zu erkennen ist wird nach dem Start eine Routine augerufen die die 
LED 3x ein und ausschaltet. zwischen jedem einschalten wartet die 
Routine delay_1s was in etwa 0.1Sek entspricht.
Danach soll die LED eingeschaltet werden und an bleiben. Da sich das 
Programm dann nur noch in der _Go_Main Schleife befindet, nahm ich an 
dann sollte die LED an bleiben. Aber sie blinkt anschließend im ca. 1 
Sekunden Takt. Um das zu verhindern habe ich eine 2. Warteschleife die 
ca. 2 Sekunden warten soll. Diese führe ich zur Sicherheit sogar 2x 
nacheinander aus, aber trotzdem blinkt die LED im Sekundentakt.

Hat dafür jemand eine Erklärung?
Ich habe schon Stunden damit zugebracht, verstehe es aber nicht.
Bin, wie man sicher am Code erkennt, allerdings ein Rookie in der PIC 
Programmierung.

Vorab vielen Dank Reiner

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Reiner L. schrieb:
> _Go_Main
>   call _SET_BrakeLight
>   ;ON für Permanent
>   call _SET_BrakeON
>
>     goto _Go_Main  ; Loop Forever

Hi

Wenn ich Das recht verstehe, ist '_Go_Main' ein Label.
Dieses wird nach dem Durchlauf auch wieder angesprungen.
Und dort wird die Blink-Routine angesprungen (_Set_BrakeLight) und 
danach _Set_BrakeOn.
Danach beginnt dieser Ablauf wieder von Vorne - wenn Du statt dem Sprung 
zu '-Go_Main' eine wirkliche Endlosschleife machst, passt Das besser.

In der Art wie:

_Endlosloop
goto _Endlosloop

(mir gefallen Label mit : dahinter besser ;))

MfG

von Reiner L. (reiner_l)


Lesenswert?

Hallo Patrick,

danke für deine schnelle Antwort.

Ich bin eigentlich davon ausgegangen das es eine wirkliche Schleife ist,
das Semikolon dahinter soll nur den Kommentar vom Befehl trennen.

ich kann da keinen Fehler ekennen.

Gruß Reiner

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Reiner L. schrieb:
1
Label                       _Go_Main
2
Aufruf Funktion Blinken     call _SET_BrakeLight
3
Aufruf Funktion Dauerlicht  call _SET_BrakeON
4
goto Label                  goto _Go_Main
Damit springst Du, nachdem Dauerlicht, wieder zum Label und dahinter 
kommt Blinklicht, Dauerlicht, Sprung, Blinklicht, Dauerlicht, ......

Versuche Mal das, ohne meine 'Erklärungen' davor:
1
Label                       _Go_Main
2
Aufruf Funktion Blinken     call _SET_BrakeLight
3
Aufruf Funktion Dauerlicht  call _SET_BrakeON
4
Label                       _Endlos
5
goto Label                  goto _Endlos

MfG

von Reiner L. (reiner_l)


Lesenswert?

Danke Patrik,

ich habe es jetzt so geändert,
;_Go_Main
  call _SET_BrakeLight
  ;ON für Permanent
  ;call _SET_BrakeON
  BSF PORTB,RB1
  _Endlos
      ;leer
  goto _Endlos

    ;goto _Go_Main  ; Loop Forever
aber keine Verbesserung, es blinkt 3x wie gewünscht, danach blinkt es in 
Abständen von ca. 1 Sekunde, aus unerfindlichen Gründen.

Wie du siehst habe ich die Funktion komplett auskommentiert und setze 
zuletzt nur noch den PIN auf ON.

Gruß Reiner

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Hast Du noch einen Timer laufen?
Irgend was in der Richtung PWM, wo die Frequenz nicht so passt?

Habe leider keine Ahnung von PICs und mir den Programmablauf aus dem 
Listing nur interpretiert.

Das Sekundenblinken - tritt Das auch auf, wenn Du vorher statt 3x öfter, 
15x blinken lässt, damit Du eine Laufzeit hast, Die in das 
Sekundenblinken rein fallen würde?

Sieht bis jetzt so aus, als ob der µC eh alle Sekunde blinken würde 
(warum auch immer), Du davon aber Nichts merkst, da die erwarteten 
Blink-Zyklen wie gewollt ablaufen, aber vor dem ersten 
Fremd-1-Sekunden-Blinken, bereits vorbei sind?

Wenne s eine Main gibt, gibt's soch bestimmt eine Init, oder?

Soll heißen: Ist Das das ganze Listing, könnte ich mir damit einen 
eigenen PIC brennen?

Welcher überhaupt, vll. interessant für die Jungs, Die sich damit 
auskennen :)

MfG

von (º°)·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.· (Gast)


Lesenswert?

Da wird wohl der Watchdog ansein.
Muddu mal ausmachen.

von Reiner L. (reiner_l)


Lesenswert?

Hallo,

Grundsätzlich sehe ich das auch so wie Du.
Da muss noch was laufen, von dem ich keine Ahnung habe.
Das 1 Sekunden blinken tritt in jedem Fall auf.
Das habe ich durch deine Codeänderungen prüfen können. Es wird dann zwar 
meine Routine nicht mehr ausgeführt, aber das sekunden blinken passiert 
immer noch.

Hab auch noch mal einen anderen Pin versucht, weil dort keine anderen 
Funktionen hinterlegt sind BR5. Aber auch das gleiche.

Klar kann ich den gesamten Code zum Download bereitstellen, es handelt 
sich im konkreten Fall um einen PIC 16F628A.

Wenn es hilft ;-).

Gruß Reiner

von Reiner L. (reiner_l)


Lesenswert?

Hallo, Watchdog?
Bitte etwas ausführlicher, kann im Moment nichts mit der Aussage 
anfangen.

meine Config Str sieht so aus:
__CONFIG _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & 
_BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF

ich denke damit sollte der Watchdog aus sein, oder ?

Gruß Reiner

: Bearbeitet durch User
von Grober Klotz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Reiner,

wenn Dein Code nicht funktionierst und Du Fragen dazu hast, solltes Du 
den gesamten Code, als ungekuerzt und vollstaendig bekannt geben. Dazu 
gibt es hier im Forum die Funktion ["Dateianhang" Durchsuchen...], dass 
man eine oder mehrere Dateien hochladen kann. Einen groesseren Quelltext 
im Forumsfenster zu zeigen halte ich fuer keine gute Idee.

Was mir an Deinem Quelltext auffaellt:

Zum Fehler selbst:
Dass  die LED nach dem 1. Durchlauf mit ca. 1Hz blinkt, kann mangels 
Delaycode nur vermutet werden, dass in Deiner Delay-Routine eine 
Zaehlvariable falsch belegt / initialisiert wird.

Nach dem letzten Einschalten der LED mit Sub "_SET_BrakeON" wird wieder 
an den Schleifenbeginn "_Go_Main" gesprungen. Dort wird die LED 
"eingeschaltet" obwohl sie ja noch aus Sub "_SET_BrakeON" immer noch 
eingeschaltet ist. Somit geht das erstmalige Blinken im noch bestehenden 
Dauerlicht unter.

CLRF CCP1CON: Dieses Register gehoert zum CAPTURE/COMPARE/PWM-Modul auf 
S. 55 des Datenblattes und hat mit Deinem Projekt (zunaechst) gar nichts 
zu tun.

Wenn ein Delay nur 0,1s dauert, solltest eindeutige Labels wie zB. 
Delay100ms, aber keinesfalls _delay_1s als Label verwenden, das 
irritiert.

Sprungziele wie "_Go_Main" gehoeren OHNE ABSTAND an den linken 
Seitenrand, optimal, bzw. wahlweise mit einem Doppelpunkt abgeschlossen 
z.B. "_Go_Main:". Dann weiss man genau, dass es sich um ein Sprungziel 
und nicht um eine Label, der z.B. Programmcode enthalten kann, handelt.
;
Als funktionierendes (praktisch getestetes) Beispiel, aber auch als 
Anhalt fuer die Darstellung des Codes - mehr nicht - haenge ich Dir ein 
Programm an, so wie ich schreiben wuerde.

mfG Grober Klotz

von Reiner L. (reiner_l)


Lesenswert?

Hallo grober Klotz ;-),
sehr witziger Name wenn man den als Anrede benutzt.

Vielen Dank für deine Informationen.
Den ganzen Code zu posten, habe ich mich nicht getraut, ich dachte das 
nervt wenn man alles hier reinhaut. Aber du hast es ja auch gleich 
erklärt, mann sollte den Code anhängen. Das werde ich demnächst machen, 
ist eh viel besser!

Ich muss eventuell noch erwähnen, das ich das Projekt aus einem anderen 
Lauflicht Projekt von mir kopiert hatte, deshalb die eine oder andere 
nutzlose Zeile, von denen ich aber annahm das sie nicht stören.

Natürlich muss ich dir auch Recht geben, das die Delays auch so gelabelt 
werden müssen, wie auch ihr Inhalt ist. Aber durch meine vielen Versuche 
war ich dann irgendwann zu faul das immer umzubenennen.

Auch die Form, wie der äußere Rand für Sprungziele, werde ich zukünftig 
wahren.

Was mich aber am meisten beeindruckt, das du ein kompletten Code 
entwickelt hast dafür, Super stark. Als ich zum ersten Mal hingesehen 
habe, wunderte ich mich maßlos wie der vollständige Code dahin kommt, 
bis ich schnell merkte, es ist nicht meiner ;-).

Ich werde das natürlich heute Abend sofort probieren und meine 
Ergebnisse kundtun.
Hoffentlich kann ich daran dann auch abstrahieren was an meiner Variante 
falsch ist, ich habe fast ein WE damit zugebracht und dann den 
Entschluss gefasst doch mal jemanden zu fragen.

Vielen Dank, ich freu mich auf meine Versuche heute Abend.
Gruß Reiner

von Reiner L. (reiner_l)


Angehängte Dateien:

Lesenswert?

Hallo GroberKlotz,

leider hat auch dein Code nicht das erhoffte ergebniss gebracht ;-(.
Deiner 2 Sekunden LED ON lassen die LED 2x blinken innerhalb von ca. 2 
Sekunden.

Ich habe es nun einen total schlanken Code benutzt um nur die LED 
einzuschalten, aber auch da blinkt diese im ca. 1 sekunden Takt.

Code ist beigefügt und Bild vom Breadboard.

von Grober Klotz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Reiner,

Das von mir mitgeteilte Programm wurde mit MPLAB 8.92 erstellt, mit 
MPLAB SIM simuliert und dann, nachdem es fehlerfrei war, mit dem sprut 
brenner 8 in den PIC gebrannt.

Dann wurde dieser Code ausgefuehrt (LED an RB1) wobei fehlerfreies 
Verhalten wie beschrieben, von mir festgestellt worden ist.

Wenn ich Deinen Code in MPLAB 8.92 lade und zu kompilieren versuche 
erhalte ich die beigefuegten Fehlermeldungen.

Offensichtlich ist da Einiges bei unseren Programmiersystemen nicht 
miteinander zu vereinbaren

mfg Grober Klotz

von Reiner L. (reiner_l)


Lesenswert?

Hallo GroberKlotz,

ich arbeite mit Product Version: MPLAB X IDE v3.50
Brenne mit PickKit3 auf den Pic.
Eigentlich macht die Umgebung einen guten Eindruck, auch andere kleinere 
Projekte tun was sie sollen.

Wenn noch wer eine Idee dazu hat, dann gerne her damit.

Ich werde damit noch weitertesten, eventuell stoße ich durch Zufall auf 
die Lösung.

Dir auf jeden Fall bis hierhin vielen Dank für Deine Bemühungen.

Ich melde mich bei Erfolg aber bestimmt auch bei Misserfolg ;-).

Gruß Reiner

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Denke, die [ avrasm ] und [/ avrasm ] gehören nicht zum PIC-Code ;)
(Ok, Die haben Atmel übernommen, aber  ob Sie so weit gehen gg)

Was machen diese beiden Konstrukte?
_MCLRE_ON
_FOSC_INTOSCIO

Die 'Suchmaschine meiner Wahl' brachte mir bei diesen Wörtern und 'PIC' 
viele 'Pictures' - jo, fail ;)

Zumindest das FOSC liest sich wie Frequenz Oszillator INT 0 OSCO - den 
Rest mit den ganzen _OFF dahinter halte ich für unverdächtig - bin aber 
PIC-Noob !! (soll heißen: habe hier nen paar PIC 8-Beiner rumfliegen ... 
war aber ne Fehlbestellung)

MfG

EDIT: Rätsraibug bessar gmacht

Edit2: das Goto $ sieht wie eine Endlosschleife aus - beim AVR wäre Das 
wohl rjmp PC, oder?

: Bearbeitet durch User
von Reiner L. (reiner_l)


Lesenswert?

Hallo Patrick,

ja die [avrasm] sind nur für Beginn und Ende als Code Marker. Ich wollte 
es erst direkt im Post machen, aber dann habe ich mich doch für einen 
Anhang entschieden.

Der Code im Anhang soll eigentlich nur eine LED einschalten und dann, 
wie von Dir schon korrekt bemerkt, in eine Endlosschleife gehen.
Aber auch bei diesem Code, wie schon geschrieben, blinkt die LED im ca. 
1 Sekunden Takt.

Das FOSC_INTOSCIO besagt nur das der interne 4MHz Taktgeber genutzt 
wird, das erspart den externen Quarz.

Na ich werde, wie geschrieben noch ein wenig damit herum 
experimentieren, eventuell kommt mir noch eine zündende Idee, oder ein 
anderer User findet den Fehler in meinem Konstrukt.

Zum besseren Verständnis habe ich noch einen kurzen Film bereitgestellt:
www.rlonline.de/BilderForForums/170227_628_SetLED.mp4

Danke und Gruß Reiner

von Thomas E. (picalic)


Lesenswert?

Hallo Reiner,

ich sehe an Deinem Minimalprogramm auch nichts, was ein Blinken der LED 
verursachen könnte! Entweder, Du hast versehentlich irgend einen ganz 
anderen Code im PIC (Assemblierung vergessen? Programmierung vergessen? 
Falsches Hexfile?), oder Dein ggf. noch angeschlossenes Programmiergerät 
löst im Sekundentakt einen Reset aus. Ziehe doch im Betrieb einfach mal 
die gelbe Verbindung zum MCLR-Pin ab...

Thomas

von Reiner L. (reiner_l)


Lesenswert?

Hallo Thomas,

vielen Dank für deine Hinweise.

Nein, einen falschen Code schließe ich aus, weil ich wechselseitig auch 
andere Projekte auf den PIC gebrannt habe die mir zur Vefügung gestellt 
wurden aber auch meine Versuche. Das Verhalten entsprach zwar immer dem 
gewünschten, mit dem Problem des Sekunden blinken.

Das PicKit habe ich auch für den Test abgezogen, so das der Pic autrak 
arbeiten musste.

Kann es sein, das meine Hardware nicht korrekt verdrahtet ist?
Ist zwar schlecht zu sehen auf dem Foto, aber auch auf dem Video sieht 
man es nicht so gut.
Eventuell hat ein User richtig gute Augen und kann da einen Fehler 
erkennen.

Gruß Reiner

von Grober Klotz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Reiner,

ich habe das File 16F628_Bremslich.ASM mal nach MPLABX importiert. 
Dabei habe folgendes festgestellt:

⦁  In der config-zeile wurde lediglich das Wort WDT_OFF angemahnt, 
wurde von mir nach WDTE_OFF geaendert.
⦁  Im Debug-Modus wurden keine Fehler mehr angezeigt
⦁  Im Simulator wurden die Delay-Zeiten mit stopwatch 
(Window->Debugging->stopwatch gemessen und wie programmiert angezeigt.
⦁  Die Kompilation zum HEX-File funktionierte anstandslos.
⦁  Das Hex-File wurde in den PIC gebrannt
⦁  Programm funktioniert auf meiner Testplatine wie programmiert

Der Fehler muss daher nicht im Programm, eher bei der Hardware gesucht 
werden.
Ich habe nun den gesamten Ordner, so wie ich das Programm in MPLABX 3.05 
importiert habe gezippt beigefuegt.

Ich hoffe, Du findest den Fehler.

mfG Grober Klotz

von Reiner L. (reiner_l)


Lesenswert?

Vielen Dank Grober Klotz für deine Hilfe und dem damit verbundenen 
Aufwand. Ich werde das natürlich heute Abend noch einmal testen.
Super wäre wenn du mir deine Harware mal aufzeichnen könntest, oder 
Foto.

Kannst du denn auf meinem Foto (Video) irgendwas erkennen, von dem du 
meinst das es Falsch oder verdächtig wäre?
Ich vermute den Fehler ja eher in der Hardware bei mir.

Ich melde mich nach meinen Tests heute Abend.

Gruß Reiner

PS: mal ne blöde Frage, wie muss ich denn einen Weblink markieren? Ich 
habe dazu nichts gefunden.

von Thomas E. (picalic)


Lesenswert?

Reiner L. schrieb:
> PS: mal ne blöde Frage, wie muss ich denn einen Weblink markieren? Ich
> habe dazu nichts gefunden.

Aber Du solltest doch wissen: Es gibt keine blöden Fragen! ;)

Schreib ein "http://"; davor:
http://www.rlonline.de/BilderForForums/170227_628_SetLED.mp4

: Bearbeitet durch User
von Reiner L. (reiner_l)


Lesenswert?

Oh man, mich ohrfeigen dauernd ;-).
na klar, da hätte ich ja auch mal selbst drauf kommen können.
Danke !!!!

von Grober Klotz (Gast)


Lesenswert?

Hallo Reiner,

ich habe mir mal das Foto Deiner Schaltung angeschaut (soweit das nun 
mal moeglich ist). Wenn ich das richtig sehe, ist auf dem Steckbrett

Pin 1 (RA2)  und Pin 4 (RA5/MCLRE)  mit R10k verbunden,
RA5 ist jedoch mit R=10kOhm nach +Vdd zu verbinden! vgl. Link unten

Von Pin 1 fuehrt ein rotes Kabel zur Steckleiste  nach (?? +Vdd??)
Sollte dies der Fall sein - wenn RA2 als Output konfiguriert ist, und 
auf LOW liegt - wird dieser PIN strommaessig total ueberlastet!

Das weisse Kabel fuehrt vom Taster zum Pin4 (MCLRE)
das waere zwar richtig, wuerde aber evtl. wegen dem 10k nach RA2 
Probleme bereiten koennen.

Vom Taster fuehrt ein weisses Kabel nach (??GND??)
das waere richtig, Hinweis im Datenblatt 17.0 ELECTRICAL SPECIFICATIONS 
"Note" beachten.

ICSP:
Falls RB7/RB6 (Data/Clock) beschaltet sind, sollte die Beschaltung mit 
je 1kOhm von den
ICSP-Leitungen Data/Clock entkoppelt werden.

Schau Dir mal ueber die korrekte Beschaltung von MCLR/RB5 (Pin4) diese 
Links bei www.sprut.de an:
http://www.sprut.de/electronic/pic/reset/index.htm#mclr
http://www.sprut.de/electronic/pic/icsp/icsp.htm
http://www.sprut.de/electronic/pic/icsp/icsp.htm#3
(Bei dem Bild mit dem ICSP-Stecker ist die sprut-eigene Belegung 
angegeben! Das Pickit verwendet eine spiegelverkehrte Belegung!)

Vielleicht hilft Dir das weiter

mfG Grober Klotz

von Grober Klotz (Gast)


Lesenswert?

Hi Reiner,
Nachtrag zu Deiner Frage
>Super wäre wenn du mir deine Harware mal aufzeichnen könntest

Zur verwendeten Testplatine:
Ich habe mir vor Jahren diese Testplatine (spaeter auch die fuer 28pin 
modifiziert) nachgebaut:
http://www.sprut.de/electronic/pic/test/index.htm#84

Mit diversen Steckmodulen (EEPROM, LCDs, RTCs=RealTimeClock usw) 
ergaenzt, konnte ich bis heute fast alle meine Projekte ohne allzu 
grossen Aufwand testen, bevor ich mal was fertig aufgebaut habe.

Die Testboards verwende ich in Verbindung mit dem Pickit3 (fuer Pickit3 
modifizierte ICSP-Anschluesse), bzw. dem Brenner 8 von sprut.

mfG Grober Klotz

von Reiner L. (reiner_l)


Lesenswert?

Vielen Dank,

das liest sich so, als wenn da irgendwo der Hund begraben liegt. Das 
werde ich natürlich zeitnah heute Abend prüfen.

Danke und bis dann, hoffentlich kann ich eine positive Rückmeldung 
geben.

Gruß Reiner

von Reiner L. (reiner_l)


Lesenswert?

Hallo Grober Klotz,

ich hatte gestern Abend wenig Zeit aber habe trotzdem einiges geprüft. 
(war aber keine gute Idee ;-)

An der Hardware habe ich eigentlich keinen Fehler erkennen können. 
Soweit ich das verstanden habe, werden die 10 oder 20K an RB5 gegen VDD 
nur beim Sprut Brenner benötigt, weil der mit 12V arbeitet, beim PicKit 
ist das nach meiner Meinung nicht so.

Was aber überhaupt nicht lief, war deine Projekt zip, ich konnte das 
Projekt zwar nach dem entpacken im MPLABX 3.05 als Projekt öffnen, aber 
dann kam beim compilieren ein Fehler.
Da ich noch nie ein vorhandenes Projekt so bekommen habe, hatte ich den 
Fehler zuerst mal ignoriert und habe mich erinnert du hattest etwas von 
Import geschrieben. Also gelöscht und über Import versucht, das klappte 
aber nicht, da kann man nur in die Version v8.x importieren?
Wieder gelöscht und als Projekt geöffnet, ab dem Moment habe ich aber 
immer ein Ausrufezeichen am Projektordner gehabt und konnte nicht mehr 
auf das Projekt zugreifen.
Auch meine schon vorhandenen Projekte konnte ich dann nicht mehr auf den 
Pic brennen?

Aber wie schon erwähnt ich hatte sehr wenig Zeit und war eben gespannt 
ob es eine Lösung gibt.

Ich werde mich noch einmal ausführlicher damit beschäftigen. Ich denke 
das war nicht der richtige Moment.

Melde mich wieder, wollte nur eben dan aktuellen Stand mitteilen.

Gruß Reiner

von Grober Klotz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Reiner,

Du schreibst unter anderem:

> Soweit ich das verstanden habe, werden die 10 oder 20K an RB5
> gegen VDD >nur beim Sprut Brenner benötigt, weil der mit 12V
> arbeitet, beim PicKit ist das nach meiner Meinung nicht so.

Ich sehe das jedoch anderst (bezieht sich auf den hochgeladenen 
Ausschnitt Deines Steckbrettes):

RA5 (MCLRE) muss, wenn als Resetpin (in CONFIG -> _MCLRE_ON) verwendet, 
ueber einen Widerstand (vgl microchip-Poster PICkit3 R20-50kOhm) nach 
+5V verbunden sein. Dieser Widerstand hat folgende Aufgaben:

1. Indem RA5 im PIC als digitaler Input fest verdrahtet ist, muss der
   Eingang zum sicheren Betrieb wie jeder andere Eingang auch, waehrend
   der Codeausfuehrung auf definiertem Pegel liegen.

2. Der Widerstand von MCLRE nach +Vdd schuetzt die anderen
   Schaltungsteile, welche ueber die Vdd-Leitung versorgt werden, vor 
der
   hohen Programmierspannung.

3. Waehrend der Ausfuehrung des Codes muss MCLRE ueber den Widerstand 
auf
   +Vdd bleiben, nur dann kann der PIC sein Programm ausfuehren
   (wenn in CONFIG -> _MCLRE_ON).

4.  Zum Programmabbruch (RESET) wird MCLRE, wie bei Deiner Schaltung,
    ueber einen Taster auf GND gezogen. Die Programmausfuehrung startet
    sodann wieder an Adresse 0x000 (reset vector), sobald am MCLRE-Pin
    wieder +Vdd anliegt

Zu Deiner Schaltung (vgl. Anhang Reiner_Breadboard_Snip.PNG):

Die Ecke mit dem versenkten Punkt vorne unten links gibt vor, dass hier 
die Zaehlung der Pins mit 1 beginnt - klar-.

Pinbelegung (Irrtum vorbehalten) so wie das fuer mich sichtbar / bzw. zu 
vermuten ist:

· Pin 1 (RA2) ist offensichtlich ueber 10kOhm mit Pin 4 RA5/MCLRE/Vpp)
  verbunden – m.E. FEHLER

· Pin 1 ist mit dem roten Kabel vermutlich mit +5V verbunden (nicht 
sicher
  erkennbar) – m.E. FEHLER

Korrektur durchfuehren: Widerstand 20-50k von RA5 direkt auf +5V legen

· Zu Pin 4 (RA5/MCLRE/Vpp) fuehrt noch ein gelbes Kabel, vermutlich die
  Programierspannung Vpp - OK

· Zu Pin 4 fuehrt noch ein graues Kabel zum Taster (Reset)  - OK
  (Bitte Taster beim Flashen nicht druecken, denn dann ist das Pickit
  defekt)

· Pin 5 (Vss) schwarzes Kabel fuehrt vmtl nach GND (0V) – OK
· Pin 7 (RB1) ist ueber LED + R 220 nach GND geschaltet – OK
· Pin 14 (Vdd) ist mit roten Kabel vmtl. Nach +5V geschaltet – OK

mfG Grober Klotz

P.S. Nochmals geprueft: mein Code, importiert von MPLABX laeuft 
problemlos.

von Reiner L. (reiner_l)


Lesenswert?

Hallo Grober Klotz,

vielen Dank für deinen Aufwand.

Ich musste zuerst mal ein wenig an der IDE reparieren, offensichtlich 
hatte ich mir beim experimentieren gestern das Makfile zerschossen.
Nach ein wenig Suche kam ich aber drauf.

Die gute Nachricht, auf meinem Velleman K8048 funktioniert der PIC mit 
dem von dir gesendeten Code so wie es die Programmierung besagt.

Also liegt es definitiv an der Hardware.

Ich habe also deine Änderungen durchgeführt, eigentlich ist das einzige 
was du bemerkt hattest der Wiederstand nicht gegen pin 1 sondern direkt 
gegen +vdd. Das also geändert.

Aber selbst das erhöhen des Wiederstands auf 47K brachte keine 
Veränderung. auf dem Breadboard blinkt die LED im Sekundentakt wo sie 
doch 2 Sekunden an sein sollte.

Ich bleibe dran.

Gruß Reiner

von Grober Klotz (Gast)


Lesenswert?

Hallo Reiner

Mir faellt noch was zu Deinem Schaltungsaufbau ein:
Falls noch nicht geschehen, stecke einen 100nF-Keramikkondensator 
(keinen Elko!) direkt ueber den Vdd und Vss-Pin (kuerzeste Verbindung 
absolut erforderlich). Dieser C darf beim PIC NIE fehlen.

Ob der Pullup an MCLRE 20k oder 50k hat spielt fuer das Fehlverhalten 
keine Rolle.

Hast Du die Schaltzeiten mit dem Simulator (Watch-Window und stopwatch) 
schon mal gemessen? Bei mir kommen dabei stets die mit Delay 
vorgegebenen Zeiten heraus, denen auch der visuelle Eindruck entspricht.

mfG Grober Klotz

von Reiner L. (reiner_l)


Angehängte Dateien:

Lesenswert?

Hallo noch mal Grober Klotz,

eigentlich habe ich jetzt keine Idee mehr.

Um alles auszuschließen was Fehler beinhalten könnte, habe ich eine 
absolute Minimalvariante auf dem Breadboard erstellt. (siehe Bild)

Ich denke da müssten alle Fehler ausgeschlossen sein.
Das entspricht genau der Beschaltung auf dem Velleman Testboard.

Auch im Internet habe ich diverse Bilder und Beschreibungen erneut 
gelesen.
Mir ist das absolut schleierhaft.

Eigentlich ist es nich wirklich wichtig, auch die jetzt vorliegende 
Variante wäre zu Not akzeptabel, soll nur für ein RC-Modellauto sein. 
Aber du weißt ja wie das ist, wenn man sich erst mal was in den Kopf 
gesetzt hat.

Es ist ja auch total ärgerlich, wenn es eigentlich funktionieren müsste 
(theoretisch), aber es einfach nicht das macht, was es soll.

Was soll es. Ich denke ich werde das jetzt mal ein paar Tage sacken 
lassen.
offensichtlich hat auch kein anderer Benutzer mehr eine Idee ;-).

Ich dankle dir jedenfalls riesig für deine Bemühungen.

Gute Nacht und Gruß Reiner

von Reiner L. (reiner_l)


Lesenswert?

Noch ein Nachtrag, damit man das auch nachvollziehen kann, habe ich noch 
zwei Videos bereitgestellt, die das Verhalten dokumentieren.

Variante Breadboard
http://www.rlonline.de/BilderForForums/MOV_0386.mp4

Varainte Velleman K8048
http://www.rlonline.de/BilderForForums/MOV_0387.mp4

wohlgemerkt, es handelt sich um den gleichen PIC nur einmal in das eine 
und das andere Board eingesteckt. Verrückt, oder ;-).

Gruß Reiner

von Thomas E. (picalic)


Lesenswert?

Ich glaube, ich weiß, was los ist!
Deine LED auf dem Breadboard ist gar keine normale Standard-LED, sondern 
eine Blink-LED (eine mit eingebautem Blinker-Chip!)
Schließe sie einfach mal direkt an die Versorgungsspannung an, statt an 
den PIC-Port und Du wirst sehen, daß der PIC am Blinken völlig 
unschuldig ist!

von Reiner L. (reiner_l)


Lesenswert?

Ohhhh, na klar das kann sein, ich habe die nur aus der Grabbelkiste 
genommen.
Das ist durchaus möglich... mich vor den Kopf schlagen ohne Ende ;-).

Das du dadrauf gekommen bist!!! Alle Achtung.

Werde ich natürlich heute Abend direkt prüfen.

Vielen, Vielen Dank Thomas, ich denke das wird es sein.

Sorry an Grober Klotz das ich dich solange mit meinem Fehler belästigt 
habe.

Ich melde mich heute Abend, ich kann es kaum erwarten. Leider kann ich 
nicht einfach losfahren, sind immerhin 60km, aber am liebsten würde ich 
;-).

Gruß Reiner

von Reiner L. (reiner_l)


Lesenswert?

Hallo Thomas du bis mein Held !!!

Ich wäre wohl nur durch Zufall drauf gekommen. Es ist natürlich genauso 
wie du es geschrieben hattest.
Als du es erwähnt hast, war mir auch sofort klar das es die Ursache ist. 
Man sollte eben nicht einfach mal in die Grabbelkiste greifen wenn man 
mal schnell ein Bauelemenet zu Testzwecken benötigt. Oder aber die 
Grabbelkiste regelmäßig weg sortieren.

Aber auch sonst allen Dank die sich mit meinem Problem beschäftigt 
haben.

Grober Klotz an deinem Beispiel habe ich sehr viel lernen können, auch 
wie man einen Code besser strukturiert, damit er lesbarer und 
übersichtlicher wird.

Ich vermisse eigentlich grundsätzlich größere Code Beispiele im Froum. 
Gerade für Anfänger ist es mitunter sehr hilfreich die Vorgehensweise 
von anderen zu sehen.

Also, Problem gelöst, schöne Tage, Gruß Reiner

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Das ist ja geil :)

Und Danke für das Feedback - so kann's gehen ...

PS: Zumindest kannst Du jetzt auch ohne µC was blinken lassen (genau 
genommen ist da auch ein µC drin, aber Schwamm drüber)

MfG

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.