Alle Beiträge von chef

Propeller Chip – Composit Fehlerursache gefunden

Heute und auch gestern Nacht fiel mir auf, das sich der Propeller Chip auf meinem Eigenbau Board nicht mehr programmieren ließ. Das heißt programmieren ließ er sich eigentlich wie immer über die COM Schnittstelle meines PC, aber laufen tat er danach nicht. Heute morgen war ich es leid und habe mal ein altes Programm benutzt um die 7-Segment Anzeige anzusprechen. Und siehe da alles funktionierte wunderbar.

Wo liegt der Unterschied zwischen dem alten Programm und dem Neuen, welches auch schon mal wunderbar funktioniert hat. Es sind diese Programmzeilen…

CON

_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000

Damit wird dem Propeller gesagt das er einen externen Quartz mit der Frequenz von 5MHz hat und diese Frequenz mittels seiner integrierten PLL-Schaltung mit 16 multiplizieren soll um auf seine endgültige Taktfrequenz von 80MHz zu kommen. Diese 80MHz werden zwingend zum generieren des Composit Videosignals benötigt.

Zuerst habe ich die Zeilen als Kommentar markiert (deaktiviert). Dann lief alles wieder. Danach habe ich pll8x und pll4x ausprobiert. Mit pll8x lief auch nichts nur mit pll4x. Irgendwie verträgt der Propeller höhere Frequenzen nicht, obwohl er das locker mitmachen soll.

Ach ja und mit pll4x bekomme ich auch ein (frequenzmäßig zu tiefes) Videosignal auf meinem Oszi am Composit Videoausgang angezeigt. Es liegt also alles nur am Takt des Propeller. Frage mal im Forum, nicht das ich ein Bauteil (Kondensatoren) vergessen habe was wichtig ist.

Propeller – Composit Signal

 

MDA Touch ist doch nicht so schlecht

Also ein normales Handy möchte ich nicht mehr haben. Alleine das große Display tut meinen Augen schon gut. Bin aber schon scharf auf das neue HTC Touch HD. Der MDA Touch erfordert nur eine radikale Umgewöhnung.

Kurze Zusammenfassung. Ich habe das Gerät mittels des Programms Battery Status permanent auf 286MHz übertaktet. Gehe ich höher stürzt der MDA ab. Dadurch wird der MDA spürbar schneller, ist aber insgesamt immer noch lahm.

Das Gerät ist schon mehrmals runter gefallen und hat nun zwei Gehäuserisse die aber weder das Handling noch die Optik stören. Also das Gehäuse ist echt stabil.

Einen Eingabestift brauche ich so gut wie gar nicht, reine Gewöhnungssache. Die Telefon Software ist zu träge. Die Smartdial Funktion nehme ich meistens zum Kontakte suchen und anwählen, aber auch das Quickdial (Zifferntasten länger drücken) ist tauglich. Untauglich wie ich finde sind die Kontakte zumindest beim anrufen von Personen. Es dauert einfach viel zu lange durch die Liste zu scrollen. Das macht keinen Spaß. Bei einem richtigen Handy drücke ich in den Kontakten einfach den Anfangsbuchstaben und bin schon fast beim gesuchten Kontakt.

Die Uhrzeit Probleme haben sich gelegt. Das Teil zeigt nun seit Monaten die richtige Uhrzeit. Wecktermine nerven noch immer irgendwann am Tage. Sehr tauglich finde ich den Kalender, groß, gut bedienbar und flexibel. Es macht Laune Termine einzustellen.

Als recht nützlich erweist sich auch der Notizblock. Da ich im Außendienst ständig Informationen aufschreiben muss mache ich den Notizblock auf, klicke auf NEU und schon kann ich mit Handschrift irgend etwas aufschreiben oder zeichnen. Schlecht ist allerdings das man an diese aufgeschriebenen Informationen beim telefonieren sehr schlecht herankommt. Selbst wenn man heran käme so müsste man immer das Handy vom Ohr nehmen um weitere Notizen abzulesen. Beim Freisprechen geht es besser.

Der Akku hält gut durch. Alles in allem also ein robustes Gerät welches zum telefonieren durchaus taugt aber das handling dabei nicht die richtige Laune macht. Der Notizblock und der Terminkalender sind gut, die Kontaktliste weniger.

Propeller Chip – Videoausgabe CVBS

Heute habe ich gezwungenermaßen mal die Programme seziert um die Videoausgabe Abläufe zu verfolgen. Eigentlich schließe ich einen Hardwarefehler aus, da die Ports P12 bis P15 bei manueller Programmierung mit Low oder High messbar richtig reagieren.

Ich fange mal mit dem Demo-Programm TV_Text_Demo.spin an weil es im Propeller Forum zum testen empfohlen wurde.

Propeller Chip – Videoausgabe CVBS weiterlesen

Propeller – Composit Video Ausgang

Es kommt einfach kein Signal aus dem Composit Video Ausgang.

An den Ports P12,P13,P14 und P15 hängen Widerstände mit 1,1 kOhm, 560 Ohm, 270 Ohm und 560 Ohm. Auf der andere Seite der Widerstände werden alle zusammen geschlossen und bilden das Video Signal. Mit dem Oszilloskop habe ich dort gemessen, nachdem ich den Videotreiber mit tv.start(12) gestartet habe. Es kommt null Komma nichts an Signalen heraus.

Allerdings funktionieren die Ports. Wenn ich sie per Hand auf 1 oder 0 schalte reagiert der Videoausgang entsprechend mit einer Spannung. Da ich mir nun keinen Rat mehr wusste habe ich mal im Propeller Forum angefragt. Mal sehen ob jemand eine Idee hat.

propeller_cvbs_ausgang

Propeller Chip – LCD funktioniert wieder

Heute habe ich den RAM Befehl (zeigt Hauptspeicher Inhalt im Hexformat) stark umgeschrieben und verbessert. Wenn in der letzten Ausgabezeile nicht die vollen 16 Bytes ausgegeben wurden, so gab es keine Ausgabe der ASCII-Zeichen. Das habe ich nun beseitigt. Ferner habe ich einen Peek und Poke Befehl hinzugefügt. Der Poke Befehl schreibt ein Byte in das RAM und der Peek Befehl gibt es wieder aus.

Auf einem zweiten Cog habe ich eine Routine gestartet, die den Dezimalpunkt der 7-Segment Anzeige im Sekundentakt blinken lässt, damit man erkennt das der Propeller läuft. Diese Routine musste ich jedoch wieder deaktivieren weil die Ports 16-23 sowohl zur 7-Segment Anzeige als auch parallel zum LCD Display verbunden sind.

Als ich das LCD Display wieder ansprechen wollte funktionierte dies erst nicht wegen dem blinkenden Dezimalpunkt. Nach abschalten der Blink Routine ging alles glatt. Es gelang mir abermals das Wort “Hallo” auf dem LCD Display auszugeben. Abermals deshalb weil mir die alten Programme zur LCD Ansteuerung verloren gegangen waren.

propeller_lcdfunktioniert

Propeller Chip – RAM Monitor funktioniert

Von morgens früh bis jetzt 14:40 habe ich am RAM Befehl gearbeitet, der einfach einen Bereich des Propeller Hauptspeichers, hexadezimal und in ASCII Form auf einem Terminal ausgibt. Man gibt einfach ‘ram’ + ENTER ein, danach fragt der Rechner von selber nach der Startadresse. Dann drückt man wieder ENTER und er fordert zur Eingabe der Endadresse auf. Nach nochmaligem drücken von ENTER geht’s los. Die Ausgabe kann mit der SPACE Taste pausiert/fortgesetzt werden und mit ESC jederzeit abgebrochen werden.

propeller_gif_ram_funktioniert

Propeller Chip Locks – Grundlagen

Wenn zwei Cog’s auf den gleichen Speicherbereich zugreifen verhindert der Propeller eigenständig Kollisionen wenn es sich nur um einzelne Byte, Wort oder Langwort Zugriffe handelt. Diese Zugriffe eines Cog’s werden erst abgearbeitet bevor der nächste Cog Zugriff bekommt.

Wenn ein Cog jedoch in einer Schleife einen Block von Daten schreibt und ein anderer Cog diesen Datenblock zugleich liest, kann der Propeller nicht mehr sicherstellen, das alle Daten beim lesen zuvor komplett geschrieben wurden, da die HUB Rotation einfach weiter läuft.

  • Routinen die exclusiven Zugriff auf einen Hauptspeicherbereich benötigen benutzen den LOCKNEW Befehl der einen Wert zurückgibt (-1=ERROR ansonsten eine Lock-ID). Nur ein Cog sollte den LOCKNEW Befehl ausführen, dieser Cog sollte die Lock-ID auch an alle anderen Cog’s kommunizieren die diesen Speicherbereich benutzen
  • Jeder Cog der auf diesen Speicherbereich zugreifen will muss zuvor erfolgreich  die  Lock-ID sperren. Ein erfolgreiches Sperren wird durch den Rückgabewert FALSE des LOCKSET (Lock-ID) Befehls angezeigt. Falls LOCKSET TRUE zurückgibt beansprucht gerade ein anderer Cog den Speicherbereich. Der Cog muss warten bis ein LOCKSET Befehl erfolgreich ist
  • Der Cog der einen LOCKSET Befehl erfolgreich ausführt, kann den Speicherbereich nach belieben benutzen. Wenn dessen Bearbeitung fertig ist muss der Speicherbereich mittels LOCKCLR (Lock-ID) wieder freigegeben werden, damit andere Prozesse wieder auf den Speicherbereich zugreiffen können. In einem sauberen System kann der Rückgabewert von LOCKCLR ignoriert werden, solange der freigebende Cog der einzige mit der Berechtigung war, die Sperre aufzuheben.
  • Wenn ein Speicherbereich nicht länger benötigt wird sollte die darauf bezogene Sperre mittels LOCKRET (Lock-ID) wieder zurückgegeben werden. Normalerweise geschieht das durch den Cog der den LOCKNEW Befehl gegeben hat.

Zu beachten ist, daß der Haupspeicherzugriff nicht wirklich geblockt wird. Weder vom HUB oder dem Lock. Es liegt also an den einzelnen Prozessen die Regeln einzuhalten. Auch ordnet der HUB einen LOCKNEW Befehl nicht dem aufrufenden Cog zu. Jeder andere Cog kann Locks wieder freigeben.

Einplatinencomputer mit 6504 CPU

Hier noch ein von mir gebauter Einplatinencomputer mit der 6504 CPU. Die CPU ist kleiner, hat weniger PIN’s als die 6502 CPU und kann auch nur 8kByte Speicher adressieren. Die 6502 CPU kann 64kByte Speicher adressieren.

Bestückt ist das Board mit einem 2kByte 6116 SRAM Chip, einer 8255 PIO und der 6551 SIO mit nachgeschaltetem MAX 232 (leerer 16 pol. Sockel). Oben rechts sieht man ein zugeklebtes EPROM. Das EPROM diente hier als MMU (Memory Management Unit) um den knappen Adressbereich der 6504 besser ausnutzen zu können.

Bei meinen ersten Einplatinencomputern hatte ich immer einen 74LS138 Chip (Demultiplexer) benutzt um die CS (Chip Select) Signale aus den oberen drei Adressbits zu generieren.Das hat jedoch den Nachteil, das man den gesamten Adreßbereich der CPU in 8 gleichgroße Bereiche teilen muss. Der Adreßbereich einer 6502 ist 64kByte, geteilt durch 8 wären das Speicherblöcke von je 8kByte größe. Das ist geradezu verschwenderisch wenn man nur eine PIO oder SIO adressieren will, die gerade einmal zwei oder drei ansprechbare Register besitzen.

74hc138_2 74ls138

Also habe ich ein EPROM genommen, welches sehr viel mehr Adreßleitungen aufnehmen kann, und mit seinem 8-Bit Datenbus quasi eine programmierbare Speicherbereich Zuweisung  ermöglicht. Ich erinnere mich die oberen 8 Adressleitungen der CPU zur MMU geführt zu haben, das ermöglichte bei 64kByte eine Blockgröße von nur noch 256 Byte. Mit der Programmierung des EPROM habe ich ihm Einplatinencomputer mit 6504 CPU weiterlesen