Forum: Mikrocontroller und Digitale Elektronik sprut Frequenzzähler - PIC 16F628A MPASM Source?


von Wolfgang (Gast)


Lesenswert?

Hallo,

nun kämpfe ich schon den 4ten Tag mit dem sprut Frequenzzähler, der mir 
als halbfertiges Projekt mit Platine zugelaufen ist 
https://www.sprut.de/electronic/pic/projekte/frequenz/freq_uni_628.htm

Ich habe mehrmals erfolglos, auf unterschiedlichen, neuen PIC 16F628A 
Exexemplaren die auf der Homepage zur Verfügung gestellte HEX Datei 
mittels PICkit 3 Clone auf einem 64bit WIN10 Rechner mit dem standalone 
PICkit 3 Programmer mit externem Programmieradapter (ZIF-Sockel) 
geflasht. Der Brennvorgang läuft ordnungsgemäß und Verify wird 
bestätigt.

Allerdings läuft das Programm auf der Platine nicht, erkennbar daran, 
dass das zweizeilige Display nur in der ersten Zeile Recktecke zeigt. 
Typisch für ein LCD, das NICHT mit einem steuernden Prozessor verbunden 
ist; es befindet sich sich im Grundzustand - im 1-zeiligen Mode. Weiters 
leuchtet KEINE der 3 LEDs, welche den jeweilig aktiven Eingang 
signalisieren.

Es existieren mehrere Erfolgsbericht zum Nachbau im Internet allerdings 
auch eine "etwas" ältere Problembeschreibung mit den selben Symptome, 
die bei mir auftreten Beitrag "PIC 16F628A Problem (Frequenzzähler von sprut)".

Im ersten Schritt habe ich den Teil der LED Ansteuerung über Taster am 
Steckbrett nachgebaut, aber auch hier ohne Erfolg. Kleine eigene, 
adäquate Testprogramme in C laufen mit dem beschrieben Setting am 
Steckboard problemlos.

Nun wollte ich die ebenfalls vorhanden Assembler Sourcen verwenden, 
mußte aber feststellen, dass es sich um MPASM Code handelt der nur bis 
MPLABX v5.35 unterstützt wurde. Grundsätzlich besteht die Möglichkeit 
MPASM in MPLAB XC8 PIC Assembler umzuwandeln erfordert allerdings 
Eingriffe in den Code, welche ich mangels ausreichender Assembler 
Erfahrung vermeiden will
https://www.circuitbread.com/tutorials/mpasm-to-mplab-xc8-pic-assembler

Seht ihr eine Möglichkeit den Code doch noch zum Laufen zu bringen?

DANKE
Wolfgang

von Teo D. (teoderix)


Lesenswert?


von W.S. (Gast)


Lesenswert?

Wolfgang schrieb:
> Seht ihr eine Möglichkeit den Code doch noch zum Laufen zu bringen?

Wenn es für dich eine unüberwindliche Hürde ist, eine Assemblerquelle 
von MPASM nach MPLAB XC8 zu portieren, dann eher nicht. BTW: war XC8 
nicht C-Compiler? Ich benutze PIC16 schon seit langem, verwende aber 
keine Software von Microchip dafür, sondern nur meine eigene.

Nebenbei gesagt: Das Projekt von Sprut stammt ursprünglich aus 2005 und 
wurde 2015 modernisiert, soweit es auf der Seite lesen kann. Aber für 
2005 und erst recht für 2015 ist das Ganze schon ziemlich altbacken, um 
nicht zu sagen, daß da der Kalk aus allen Ritzen rieselt.

Aber was stört dich daran, die PIC's in Assembler zu programmieren? Ich 
hab vor etwa 10 Jahren mal einen Taschen-Frequenzzähler mit einem 
PIC16F617 gebaut, ist ein Reziprok-Zähler und kommt daher ohne 
irgendwelche Umschaltung zwischen Periodenmessung und Normalmessung aus, 
schafft locker 7 gültige Stellen (das hängt aber vom Referenzoszillator 
ab), kommt in der Praxis bis 100 MHz (deswegen der betreffende PIC) und 
paßt in jede Hosentasche. Und die Firmware ist in Assembler geschrieben. 
Die hatte ich sogar hier mal gepostet. Suche mal nach "Count100 
Quellen.zip". Die Schaltung hat es hier auch mal gegeben, die hieß 
"Frequenzzähler.zip"

Gib dir mal etwas Mühe, sowas schaffst du auch.

W.S.

von Chris (Gast)


Lesenswert?

Ansonsten benutze gpasm .

von Wolfgang (Gast)


Lesenswert?

Habe nun für Assembler Sourcen MPASM unter MPLABX v5.35 verwendet, alles 
ok durchgelaufen und mit PICkit 3 gebrannt - leider ebenfalls KEIN 
Erfolg.

Kann es am Brenner liegen? Habe hier nur noch alten, original PICkit 2, 
läuft aber nicht unter WIN 10 :-(

von W.S. (Gast)


Lesenswert?

Wolfgang schrieb:
> Kann es am Brenner liegen?

Woher soll unsereiner das wissen?

Aber ich hätte da ein paar einschlägige, aber leider nur recht 
allgemeine Tips für das Brennen von eingelöteten PIC's auf der Ziel-LP:
- schau nach, ob das Reset-Pin sauber bedient wird (0..VCC für den 
Normalfall, so etwa 13 Volt beim Programmieren)
- schau nach, ob der Oszillator so wie gedacht schwingt
- sind die Konfigurationsbits richtig gesetzt?
- schau nach, ob alle Pins des PIC saubere Signale bringen bzw. kriegen 
und keine Kurzschlüsse vorhanden sind (in der Ziel-LP)

W.S.

von Daniel E. (everyday_fun69)


Lesenswert?

Ich empfehle ein PicKit3 von Ali, einen PIC der vom MCC Codeconfigurator 
unterstützt wird und die Microchip Programmierumgebung. Dort kannst ja 
auch den bestehenden ASM Code einbinden.
Ein Simulator für Programm gibts auch dazu.

Half mir persönlich gut.

von Wolfgang (Gast)


Lesenswert?

Nachdem ich mich nun mehrere Tage erfolglos auf den PIC konzentriert 
habe, habe ich heute die Strategie gewechselt.

Ich habe ALLES in Frage gestellt und nach extensivem messen mit dem 
Oszilloskop auch die Kabel getestet. Dabei habe ich festgestellt, dass 3 
Anschlüsse des zehnpoligen LCD Steckers defekt sind! Nach Tausch des 
Kabels hat der Zähler sofort funktioniert.

Ich habe gelernt, dass meine Hypothese zur Funktionsweise des Programms 
falsch war. Ich nahm an, dass es auch läuft wenn das LCD nicht 
angeschlossen ist und habe mich nur auf die Eingangsumschaltung als 
Testfall konzentriert. Aber offensichtlich liest der Controller auch 
Daten aus dem Display und „hängt sich auf“, wenn kein LCD vorhanden ist 
– ein zeitintensivere Lernprozess aber ich bin trotzdem froh, dass ich 
die Herausforderung lösen konnte.

Noch froherer Ostern
Wolfgang 😊

von Teo D. (teoderix)


Lesenswert?

Wolfgang schrieb:
> Aber offensichtlich liest der Controller auch
> Daten aus dem Display und „hängt sich auf“, wenn kein LCD vorhanden ist

Ja, gut möglich, ich hab zB. so'n Scheiß programmiert (weil ichs 
kann...;). Da wird evtl. das Busy-Bit blockierend abgefragt, dann 
hängt das Programm beim schreiben auf das LCD hängen.
Man könnte dann, zB. diese abfrage durch eine simple Pause von 2ms 
ersetzen. performantmäßig bringt das kaum nen Einbruch, quasi Null. (mit 
etwas mehr Aufwand wirklich ~0)

von Dieter (Gast)


Lesenswert?

Wolfgang schrieb:
>
> Aber offensichtlich liest der Controller auch
> Daten aus dem Display und „hängt sich auf“, wenn kein LCD vorhanden ist

Steht auch so im Source Code (Datei lcd.asm)
1
  ; darauf warten, daß das Display bereit zur Datenannahme ist
2
  LcdBusy
3
  ...

Die entsprechende Funktion hat keinen Timeout.

von Toxic (Gast)


Lesenswert?

Nur als Ergaenzung:
Es gibt noch einen Frequenzzaehler basierend auf den PIC16F628
https://www.qsl.net/dl4yhf/freq_counter/freq_counter.html

Kaufen laesst es sich auch - als Clone
https://www.ebay.de/itm/233061553477?hash=item36438d1545:g:jQcAAOSwa3lcHdBS
=====================================================
Ich habe selbst schon mit asm-Code LCD-Displays angesteuert und am 
Anfang vom Didplay zurueckgelesen.Aber mal ehrlich:fuer die meisten 
Projekte moechte man einfach Daten ausgeben und den Cursor 
positionieren.Dazu braucht man keinen bi-direktionalen Datenverkehr.....

von Cartman (Gast)


Lesenswert?

> original PICkit 2, läuft aber nicht unter WIN 10 :-(

Kwatsch.

von m.n. (Gast)


Lesenswert?

Dieter schrieb:
> Steht auch so im Source Code (Datei lcd.asm)
>   ; darauf warten, daß das Display bereit zur Datenannahme ist
>   LcdBusy
>   ...
>
> Die entsprechende Funktion hat keinen Timeout.

Einen pull-down Widerstand an D7 anschließen löst das Problem.

Beitrag #7036857 wurde vom Autor gelöscht.
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.