Spaceshuttle-Countdown für C-Control Pro Mega128 gesucht

Ich werde mal als Übergangslösung das AbsDelay( 1 ) nach jedem LCD_Write[...]() und LCD_ClearLCD() in das Countdown Programm einbauen. Der Grund warum das nur eine Übergangslösung ist, ist dass sich dadurch jedes mal, wenn eine der Funktionen aufgerufen wird, der Countdown um eben 1 Millisekunde verzögert. Das sollte jedoch mit Threads lösbar sein und wenn nicht kann man ja einfach irgend wann einen Zeitausgleich machen.

Edit: Korrektur auf AbsDelay( 10 ).

Gruß
BlackMark
 

Anhänge

Zuletzt bearbeitet:
Ich habe auf Basis meiner Ergänzung meines letzten Posts das Delay auf 10 erhöht.
Jetzt sehe ich schonmal ein 00:00:00
Ich werde glich mal etwas eingeben und beobachten...


Edit 1:

Der Countdown zählt^^


Edit 2:

In der zweiten Zeile zählt er weiter^^.

DSC00464.JPG

Da würde ich doch glatt sagen, SUCCESS.
 
Zuletzt bearbeitet:
Vorläufig können wir von Success sprechen, aber leider ist der Countdown nun nicht mehr wirklich genau. In 20 Minuten geht der Countdown 12 Sekunden hinten! Ich versuche mal das mit Threads hinzubekommen.

Gruß
BlackMark
 
Ich habe den Countdown auch mit dem Delay 1 getestet, und es funktioniert auch ohne Fehlanzeige, jedoch würde ich durch die Erkenntnisse aus "Board Test 4" bei einem Delay von 10 bleiben.


Ich teste das Delay bei "Board Test 4" weiter und werde die Erkenntnisse später hier posten.

Wenn ein Delay von 1 eingegeben ist, wird die 7 nicht angezeigt, dafür erschein "Seven" fehlerfrei im Display.
Wir ein Delay von 2 eingegeben, wir die 7 angezeigt, dafür gibt es eine Fehlanzeige anstatt "Seven"

Code:
    LCD_CursorPos(0);
    LCD_ClearLCD();
    AbsDelay( 1 );
    LCD_WriteChar( '7' );
    AbsDelay( 2000 );

    LCD_CursorPos(0);
    LCD_ClearLCD();
    AbsDelay( 1 );
    LCD_WriteText( "Seven" );
    AbsDelay( 2000 );

Mal schauen, wann es stabil wird ...

OK, das ging schnell.
Stabil wurde es bei:

Code:
    LCD_CursorPos(0);
    LCD_ClearLCD();
    AbsDelay( 2 );
    LCD_WriteChar( '7' );
    AbsDelay( 2000 );

    LCD_CursorPos(0);
    LCD_ClearLCD();
    AbsDelay( 3 );
    LCD_WriteText( "Seven" );
    AbsDelay( 2000 );
Ergänzung ()

BlackMark schrieb:
Vorläufig können wir von Success sprechen, aber leider ist der Countdown nun nicht mehr wirklich genau. In 20 Minuten geht der Countdown 12 Sekunden hinten! Ich versuche mal das mit Threads hinzubekommen.

Gruß
BlackMark

OK, Danke.
 
Zuletzt bearbeitet:
Teste mal bitte beim Countdown ob AbsDelay( 1 ) auch funktionieren würde und entferne mal das AbsDelay() in der DisplayTime() Funktion. Würde mich interessieren was dann passiert.

Gruß
BlackMark
 
AbsDelay( 1 ) funktioniert, genauso wie DisplayTime(...) ohne das AbsDelay().
Somit funktioniert beides.

Nur zu Sicherheit ... das sieht jetzt so aus:

Code:
void DisplayTime( byte byteStartCursorPos, byte byteEndCursorPos )
{
	LCD_CursorPos( byteStartCursorPos );
	LCD_WriteText( g_szLCDText );
	LCD_CursorPos( byteEndCursorPos );
}
 
Zuletzt bearbeitet:
von Schnitzel schrieb:
AbsDelay( 1 ) funktioniert, genauso wie DisplayTime(...) ohne das AbsDelay().
Somit funktioniert beides.
Dann würde ich jetzt mal behaupten, dass nur LCD_ClearLCD() eine Verzögerung benötigt, nicht aber die LCD_Write[...]() Funktionen. Ich habe jetzt den Code nochmals überarbeitet und nur nach LCD_ClearLCD() ein AbsDelay( 10 ) eingebaut, das sollte dann funktionieren. Die 10 Millisekunden sind komplett egal, weil LCD_ClearLCD() nur außerhalb der Zählerschleife verwendet wird, also kommt es auch nicht zu enormen Ungenauigkeiten. Ich hoffe nun funktioniert es endlich so wie es sollte ;)

von Schnitzel schrieb:
Nur zu Sicherheit ... das sieht jetzt so aus
Ja, genau.

Gruß
BlackMark
 

Anhänge

Die Version zu deinem Post 65 läuft nun schon seit 33 Minute und 40 Sekunden unverändert mit 10 Minuten und 9 Sekunden Unterschied zu meinem PC. Damit wäre auch diese schon OK.

Danke für deine Mühe, die du dir mit mir und dem Code gemacht und gegen hast.
Es ist mehr, als perfekt und erfüllt mehr als alle Erwartungen.

Ich muss auch zugeben, dass mir das Spiel mit den Codes spaß gemacht hat und ich mich wohl doch noch etwas ins Thema einlesen werde.

Ich sehe auch gerade, dass du die 1000 Posts voll hast.
Glückwunsch auch dazu^^.

Ich hoffe, du hattest keine Unannehmlichkeiten, dass du dich über so lange Zeit mit mir beschäftigt hast - das geht schließlich schon seit einigen Tagen.


Edit:
Die finale Version des Countdown läuft seit 13 Minuten und 45 Sekunden ohne wahrnehmbaren Unterschied zum PC.
Ich werde morgen auf eine externe Energieversorgung wechseln (da mein PC im Idle schon 200 Watt braucht) und es so weiter beobachten.

Final Success^^
 
Zuletzt bearbeitet:
von Schnitzel schrieb:
Danke für deine Mühe, die du dir mit mir und dem Code gemacht und gegen hast.
Ich hoffe, du hattest keine Unannehmlichkeiten, dass du dich über so lange Zeit mit mir beschäftigt hast - das geht schließlich schon seit einigen Tagen.
Da mir das Programmieren und Herumspielen mit dem C-Control Pro ebenfalls Spaß macht habe ich dir gerne geholfen und bin froh, dass wir es am Ende auch zum Laufen gebracht haben :D

von Schnitzel schrieb:
Ich muss auch zugeben, dass mir das Spiel mit den Codes spaß gemacht hat und ich mich wohl doch noch etwas ins Thema einlesen werde.
Wenn du weiter mit dem C-Control Pro arbeiten willst, dann kann ich dir Messen, Steuern und Regeln mit C-Control Pro empfehlen. Da wird alles schön ausführlich erklärt, mit Codebeispielen in Compact-C und BASIC und einiges mehr.

von Schnitzel schrieb:
Ich sehe auch gerade, dass du die 1000 Posts voll hast.
Glückwunsch auch dazu^^.
Danke :D
Dir fehlen ja auch nicht mehr viele, dann hast du auch die 1000 erreicht ;)

von Schnitzel schrieb:
Die finale Version des Countdown läuft seit 13 Minuten und 45 Sekunden ohne wahrnehmbaren Unterschied zum PC.
Sofern der Timer bei dir genauso wie bei mir läuft, sollte nach 60 Stunden der Countdown in etwa 2 Sekunden vor gehen.

von Schnitzel schrieb:
Ich werde morgen auf eine externe Energieversorgung wechseln (da mein PC im Idle schon 200 Watt braucht) und es so weiter beobachten.
Das ist aus mehreren Gründen eine gute Idee! Zum einen hast du einen freien USB Port und bist nicht mehr auf einen laufenden PC angewiesen, zum anderen bekommst du die richtige Menge an Strom und kannst den Ein/Aus-Schalter verwenden. Aber am wichtigsten ist, dass du nicht mehr Gefahr laufen kannst deinen USB Port kaputt zu machen, laut Dokumentation zieht das C-Control Pro nämlich mehr Strom aus dem USB Port als laut Standard verfügbar ist. Dadurch könntest du deinen USB Port ruinieren. Also lass den Countdown nicht zu lange über USB Strom laufen.

von Schnitzel schrieb:
In der Tat!

Gruß
BlackMark
 
von Schnitzel schrieb:
Werde ich in den nächsten Tagen gleich mal bestellen.
Thx für den Tip.
Bitte, kein Problem ;)

Ich habe gerade gesehen, dass sich noch ein kleiner Fehler eingeschlichen hat, als ich den Code von PortA.6 bzw. PortA.7 auf PortF.6 bzw. PortF.7 geändert habe. Laut Dokumentation ist PortF.6 als 46 und PortF.7 als 47 definiert, die beiden hören aber laut Dokumentation auch auf die Namen ADC6 bzw. ADC7. Also habe ich mir gedacht, nehme ich halt ADC6 und ADC7 statt 46 und 47 um die Ports in meinem Programm zu verwenden. Das ist aber keine gute Idee gewesen, weil ich jetzt mal nachgesehen habe und ADC6 ist als 6 und ADC7 als 7 definiert, nicht gerade das was ich haben wollte. Scheinbar sind ADC6 und ADC7 nur andere Namen für die Ports, dürfen aber nicht im Code verwendet werden um die Ports anzusprechen.
Ich habe den Code nun so verändert, dass er sich die entsprechenden Pins aus den eigentlichen Port Definitionen ausrechnet. Jeder Port hat 8 Pins und die Pins sind einfach durchnummeriert, angefangen bei PortA.0 = 0 bis PortG.4 = 52. Also bekommt man PortF.6 indem man PortF * 8 + 6 rechnet, wobei PortF als 5 definiert ist. ( PortA = 0, PortB = 1, ... )
Im Anhang findest du nun den hoffentlich fehlerfreien Code.

Gruß
BlackMark
 

Anhänge

Zuletzt bearbeitet:
OK, danke.
Werd ich gleich mal aufspielen.

Ich saß gerade mit einem Universalnetzteil in der Hand vor dem Board und merkte, dass ich gar nicht weiß, wie dies gepolt sein soll.
Dann hab ich das Handbuch zwei mal durchgeblättert (-scrollet), aber leider für mich nichts Hilfreiches gefunden (oder ich habe es einfach übersehen).
Könntest du mir bitte auch hierbei weiterhelfen.
Danke.
 
Könntest du ein Photo von deinem Problem machen, ich weiß nämlich nicht genau wie du das meinst?!
Das C-Control Pro hat nur einen Stecker für den Strom, da können dir die Pole recht egal sein.
Außer du steckst das Kabel, welches in das C-Control Pro Board gehört nicht direkt in die Steckdose ( so wie das bei mir der Fall ist ), sondern verwendest ein Netzteil. Das willst du machen, oder?

Gruß
BlackMark
 
Richtig, das will ich machen.
Dass das Kaben nicht direkt in die Steckdose gehört, ist mir schon klar.
Ich verwende ein Universalnetzteil, welches 3V; 6V; 9V; ... Ausgangsstrom liefern kann.
Mir geht es darum, ob der Pluspol innen oder außen sein muss.
http://commons.wikimedia.org/wiki/File:AC_adaptor_polarity.png
 
von Schnitzel schrieb:
Dass das Kaben nicht direkt in die Steckdose gehört, ist mir schon klar.
Naja, bei meinem Kabel ist das Netzteil schon hinten dran und gehört somit direkt in die Steckdose ;)
Bei dir könnte das bleibende Schäden verursachen, also lieber nicht versuchen :lol:

von Schnitzel schrieb:
Mir geht es darum, ob der Pluspol innen oder außen sein muss.
Ich war kurz etwas verwirrt, weil ich an das als erstes gar nicht gedacht habe und auf meinem Netzteil und Kabel die Polarität nicht erkennbar ist. Im Manual habe ich aber die Lösung gefunden, es ist vollkommen egal! Das C-Control Pro regelt die Pole intern, du musst dir darüber keine Gedanken machen. Hauptsache du gibst ihm ca. 9V / 250mA, muss aber auch nicht exakt sein. Bei mir läuft es mit 10V / 300mA ohne Probleme.

Gruß
BlackMark
 
Aha, OK.
Ich hatte die ganze Zeit nach dem Symbol gesucht und nicht gefunden.
Dann gehe ich jetzt und probiere es gleich mal aus.
Thx.
 
von Schnitzel schrieb:
Ich hatte die ganze Zeit nach dem Symbol gesucht und nicht gefunden.
Im Manual steht es drinnen. Wenn du die C-Control IDE startest findest du oben in der Leiste die Hilfe, dort kannst du auch nach Begriffen suchen, sehr hilfreich wenn man nicht alles durchblättern will.

von Schnitzel schrieb:
Dann gehe ich jetzt und probiere es gleich mal aus.
Viel Glück :D

Gruß
BlackMark
 
Zurück
Oben