Forum: Mikrocontroller und Digitale Elektronik C zu HEX, Code fehlerhaft, Verständnisproblem?


von Hei S. (baracuda)


Lesenswert?

Hi,

ich habe ein Problem mit einem vorhandenem Code (nehme an C), welcher in 
HEX konvertiert werden soll.

Vorweg muß ich erwähnen, daß ich von diesen Dingen keine Ahnung habe - 
aber sonst würde ich ja auch nicht um Hilfe bitten ;-)

Zur Sache :
nach langer Suche habe ich in Japan einen Bausatz für ein einfaches 
Nixie-Thermometer gefunden (war nicht einfach soetwas zu finden, da 
überwiegend nur Uhren angeboten werden). Der Bausatz ist prima aufgebaut 
(schön kompakt) und das Anfertigen klappte trotz jap. Anleitung auch 
gut.
Ebenso gut war die Kommunikation mit dem Verkäufer.
Nur leider stellte sich heraus, daß die Uhr einige Feature besitzt, die 
mir zu unruhig sind : die Anzeige zählte zwischendurch immer wieder die 
Ziffern durch : http://niix.ni.funpic.de/Nixie_Movie.mpg (420kb-MPEG)
Ich fragte also beim Verkäufer nach, ob er mir den PIC so 
umprogrammieren könne, daß ich einfach nur eine zweistellige 
Temp.-Anzeige sehen würde - ohne weitere 'Feature'.
Leider erhielt ich darauf keine Antwort.

Kürzlich habe ich aber festgestellt, daß der japanische Anbieter nun 
zus. eine einfache Version des Codes online gestellt hat. Einmal als 
HEX-Version und sogar den Source-Code (ich nehme an in 'C')
Die neue, einfache HEX-Variante habe ich mit der Software WinPIC800 
erfolgreich auf den PIC 16F648A mit einem Billig-Programmer gebrannt - 
und das schaut jetzt so aus : http://niix.ni.funpic.de/Nixie.mpg 
(320kb-MPEG)

Da ich jetzt allerdings ja auch den C-Code besitze, wollte ich dort mal 
einige Parameter zum Test zu verändern.
Denn am liebsten wäre mir eine ganz einfache, zweistellige 
Temperaturanzeige, die permanent leuchtet (das die Röhren dadurch 
stärker belastet werden, ist mir bewußt) - ohne irgendwelche 'Schnörkel' 
und ohne Nachkommastelle.

Tja - und ich dachte mir, daß die Umsetzung vom C-Code zu HEX mit 
einigen Mausklicks zu machen wäre - aber genau daran scheitete ich.

Habe mir MPLAB IDE sowie HI-TECH heruntergeladen, in Online-Tutorials 
gelesen ... und dies und das probiert. Aber so wirklich komme ich zu 
keinem Ergebnis. Da werden z.B. irgendwelche Fehler angezeigt, die im 
Code wären.
Ich habe daraufhin sämtliche Bemerkungen im C-Code entfernt und auch in 
den Einstellungen auf UTF-8 umgestellt. Aber es klappt nicht.
Der jap. Code :
http://niix.ni.funpic.de/nixie_temp_jap.txt
und ich habe mit Babelfish die entsprechenden jap. Infos mal übersetzt - 
die englische Version :
http://niix.ni.funpic.de/nixie_temp_eng.txt

Daher meine Bitte :
falls jmd. Zeit und Lust hat in den eigentlich recht kurzen Code mal 
einen schnellen Blick zu werfen, ob da ganz offensichtliche Fehler drin 
sind ?
Oder ob ich schlicht die Programme falsch bediene ?

Dank und Gruß

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Da werden z.B. irgendwelche Fehler angezeigt, die im
> Code wären.

Die aber sind das einzig interessante. Poste die ersten paar 
Fehlermeldungen.

Der von Dir "übersetzte" Quelltext enthält einige nichtportable Dinge; 
den kannst Du nur mit exakt dem richtigen Compiler übersetzen, andere 
Compiler werden mit Anweisungen wie

  #fuses HS,NOWDT,NOLVP
  #use delay(clock = 20000000)
  #use i2c(MASTER, SCL=PIN_A0 ,SDA=PIN_A1)

oder

  #int_timer0

nicht anfangen können.

Bist Du Dir sicher, daß MPLAB der Compiler ist, mit dem der Mensch in 
Japan sein Programm übersetzt hat?

von Christoph (Gast)


Lesenswert?

Setz mal Google auf einige der benutzten nicht-standard-Funktionen an, 
wie z.b. "set_tris_b". Sieht aus als wäre der Sourcecode für den CCS 
Compiler geschrieben.

von Peter D. (peda)


Lesenswert?

Hei S. wrote:
> Nur leider stellte sich heraus, daß die Uhr einige Feature besitzt, die
> mir zu unruhig sind

Das sind keine Features, sondern Fehler.
Entweder Du hast EMV-Probleme oder Verdrahtungsfehler.

Es könnte auch sein, daß irgendwelche Portpins nicht angeschlossen sind, 
die im Programm ausgewertet werden (z.B. Tasten).
Ein offener IO-Pin ist undefiniert, der fängt sich irgendwelche 
Störungen ein. Zumindest ein Pullup (4,7k gegen VCC) sollte ran.


Peter

von Hei S. (baracuda)


Lesenswert?

Hi,

@Christoph
... besten Dank schonmal für diesen Hinweis - ich werde mal schauen.

@Peter
was ich meinte ist das Hochzählen.
Leider habe ich seinerzeit nicht genau gelesen - denn auf der Website 
http://nixie-tube.com/shop/4_11.html war die Funktion des Thermometers 
eigentlich korrekt beschrieben :
The 23℃ -> the .8℃ -> it is the feeling, gimmick.
(The gimmick, from 0 it counts up to 9 in high speed)
Dort auf der Seite wird als Tipp auch ein japanisches Buch angegeben, wo 
erklärt wird, wie man Anzeigen (Röhren, usw) ansteuert .... was mir aber 
nicht wirklich hilft ;-)

Gruß

von Peter D. (peda)


Lesenswert?

Hei S. wrote:

> The 23℃ -> the .8℃ -> it is the feeling, gimmick.
> (The gimmick, from 0 it counts up to 9 in high speed)

Oh Gott!
Also wer sowas mit Absicht einbaut, der hat nicht alle Tassen im Schrank 
(sehr höflich ausgedrückt).


Peter

von Hei S. (baracuda)


Lesenswert?

Hi,

ich sehe das ja auch so - vielleicht ist der Geschmack, was sowas 
betrifft, in Japan ja anders ;-)

Gruß

von Hei S. (baracuda)


Lesenswert?

Hi,

... habe jetzt nochmal probiert, Christoph's Tipp mit dem CCS ist 
vielleicht garnicht so falsch. Leider fehlt im device-Verzeichnis der 
Testversion die entsprechende Datei für den PIC.
Neben dieser Fehlermeldung gibt es 'nur' noch drei weitere :

Line33 : Unknown keyword in #FUSES "NOLVP"
... hmm, ob das möglicherweise mit der fehlenden device-Datei 
zusammenhängen kann ? Das evtl. das Programm nicht weiß, das der 
gewählte PIC diesen Befehl verarbeiten kann ?

Line 35 : USE parameter value is out of range  Not a number: PIN_A0
... in Line35 steht
#use i2c(MASTER, SCL=PIN_A0 ,SDA=PIN_A1)

Line 40 : A #DEVICE required before this line
... Line 40 bis 42 :
 int         a0   =   0;
 int         a1   =   0;
 int         a2   =   0;

---------
@rufus
>Bist Du Dir sicher, daß MPLAB der Compiler ist, mit dem der Mensch in
>Japan sein Programm übersetzt hat?

ich weiß leider garnichts darüber. Hatte mehrmals vergeblich den Japaner 
angemailt und dann ja nur durch Zufall später die *.zip-Datei mit *.hex 
und *.c Dateien auf der Seite entdeckt.
Habe ja auch überhaupt keine Ahnung, was ich da überaupt gerade mache 
;-) dachte mir halt nur, ich könne wenigstens mal mit den Parametern im 
Code etwas herumspielen, um zu schauen ob ich möglicherweise die Pausen 
zwischen den Anzeigen etwas kürzer gestalten kann. Keine Ahnung ob das 
besser aussieht - aber halt mal ausprobieren.
Könnte ich soetwas programmieren, dann würde ich auch entweder nur 
eine dauerhafte zweistellige Temp.-Anzeige oder zügiges Umschalten 
zwischen Anzeige und Nachkommastelle und verzögertes Umschalten auf die 
Anzeige wählen (... oder von vornherein gleich etwas mit vier Röhren). 
Aber mangels Wissen und Können muß ich halt das nehmen, was es fertig 
gibt.
Zudem gefielen mir die kompakten, fertigen Platinen und das ich nicht 
lange herumsuchen mußte (z.B. auch wegen der °C-Röhre):
http://niix.ni.funpic.de/nixie_leiter.jpg
Schlimmstenfalls nehme ich das auch so wie es jetzt ist - aber eine 
permanente, zweistellige Anzeige wäre halt schöner ;-)

Gruß

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.