Bildmuster-Generator Programm mit Bascom erstellen möglich?

Hi Nomis,

@Dino: Auf IF Abfragen wird man zwar nicht ganz verzichten können, aber man kann sich damit sicher irgendwie auf den Anfang einer Zeile beschränken. Ich denke dabei daran den Ablauf jeweils der Zeilen, welche gleich aussehen, nur einmal auszuprogrammieren und am Anfang einer Zeile nur die entsprechende Zeilenroutine aufzurufen.
in Assembler könnte man das mit Reaktionen auf die Statusflags machen.
Carry- /HalfCarry-Flag und dann den entsprechenden Ausgang setzen/löschen.
Das kann man innerhalb von 2 oder 3 Taktzyklen machen. (SBIS,SBIC,SBI,CBI)
das einizge was dann noch arbeitet ist ein Zähler für die Pixel und Zeilen.
Oder man arbeitet mit Tabellen und den Index-Registern. Dann hat man
mit dem Postincrement den Zähler gratis dabei. Die Tabellenwerte werden
dann in ein Register geladen und auf einem Pin rausgeschoben.
Mit Farbe würde ich evtl 2Bit pro Farbe benutzen ...
2Bit ROT
2Bit GRÜN
2Bit BLAU
2Bit Sync/Schwarz/Weiß
Damit hat man ein 8Bit-Register voll, 64 Farben zur Verfügung und kommt
noch halbwegs mit dem Timing klar.

... und jetzt mach ich Feierabend. Ist schon spät ... :sleep:

Gruß
Dino
 
Eine interessante Idee,
das müßte mit Bascom doch auch gehen (Tabellen)?

Ich muss jetzt aber auch schluss machen für heute.

Wünsche euch noch was.

Gruß Mitch.
 
Naja, mir fällt zwar kein Argument mehr ein. Aber AVRs tuhen sich bei sowas leichter als manche denken. Siehe:Youtube
 
Hallo Zusammen,

eine interssante Diskusion, aber Bascom?
Ich denke das es nicht laufen wird, da Bascom bei Sprüngen (Gosub..) viele Register rettet un nach return wiederhestellt. Genauso ist es bei Interupts (alle Register werden auf den Stack gepoppt), wenn man Nosave verwendet und Register selbst rettet und hinterher wiederherstellt, kann man ein wenig Zeit sparen, aber das wird sicher nicht reichen. Und dann muß das Bitgeschubse auch noch als Assembler programmiert werden.

Ich denke, dann schon gleich Assembler und man hat's im Griff.

Achso, ich bin eigentlich Bascom Fan, und habe schon einige Projekte in Bascom realisiert. Dabei bin ich doch bisweilen an Geschwindigkeitsgrenzen gestoßen.

Gruß

Herbert
 
Hi Herbert,

Ich denke, dann schon gleich Assembler und man hat's im Griff.

Achso, ich bin eigentlich Bascom Fan, und habe schon einige Projekte in Bascom realisiert. Dabei bin ich doch bisweilen an Geschwindigkeitsgrenzen gestoßen.
wenn man es mit BASCOM hinkriegen will, dann muß man schon einige
Klimmzüge machen und die Erwartungen etwas runterschrauben. Bei der einen
Schaltung im Internet wurden die Pixel zB mit dem SPI-Schieberegister erzeugt.
Man muß also alles an Hardwarebeschleunigung rausholen, was der ATmega
bietet. Sonst hat man keine Chance.
Das erinnert mich an alte Basic-Zeiten auf dem ZXSpectrum. Wenn man
statt 5^2 5*5 geschrieben hat (oder statt x^2 x*x) war die Berechnung
etwas schneller. Diese Klimmzüge muß man radikal nutzen. Auch konnte man
etwas Geschwindigkeit rausholen wenn man die benutzten Werte vorher
in Variablen geladen hat. Also nicht x*10 sonder die 10 am Anfang in eine
Variable und dann nachher nur mit Variablen rechnen. Es gibt viele Tricks
um Programme schneller zu machen. Man muß sie nur kennen :D

Gruß
Dino
 
Ich würde aber sagen ihr unterstellt den Hochsprachen zu unrecht dass der erzeugte Code nicht überschaubar ist.
Was soll denn groß rauskommen wenn man beispielsweise einem Register einen Wert zuweist?
Wenn man bei einer Aufgabe wie dieser nicht sicher ist wieviel Zeit diese oder jene Aktion braucht, betrachtet man das Ergebniss doch einfach auf dem Oszilloskop.

Angenommen ein Schachbrettmuster:
Man muss nur 2 Routinen Schreiben die die 2 verschiedenen Zeilenarten, welche in einem Schachbrettmuster vorkommen, anzeigen.
Diese Routinen müssen innerhalb von, den 52us entsprechenden, 1000Takten(Annahme ist ein 20Mhz AVR) die Farbe ein paar Male wechseln. Innerhalb des Verlaufes einer Zeile eines BAS Signals hat der AVR etwa, 100Takten entsprechende, 5,8us Zeit zu ermitteln welche der beiden Zeilen er anzeigen muss und die entwprechende Routine zu starten. Etwas das, so wie ich denke, auch mit Bascom schaffbar ist.
Was den Interrupt für die Synchronisation angeht besteht für diesen, sofern man den rechten Bildschirmrand nicht einbüßen möchte, ein Budget von 30Takten bzw 1,5us.
Deshalb ist es, so wie ich denke, möglich soetwas selbst mit Bascom ohne brutale Assemblereingriffe durchzuführen.
 
Hi Nomis,

Ich würde aber sagen ihr unterstellt den Hochsprachen zu unrecht dass der erzeugte Code nicht überschaubar ist.
Was soll denn groß rauskommen wenn man beispielsweise einem Register einen Wert zuweist?
Die Hoschsprachen werden die Variablen sehr warscheinlich im SRAM ablegen.
Damit hast du die ganzen Speicherzugriffe mit drin. In Assembler kannst du
das ganze so programmieren, das du möglichst ohne SRAM auskommst und
nur die Register verwendest. Das wird in Hochsprachen schwierig (aber nicht
unmöglich)
.

Wenn man bei einer Aufgabe wie dieser nicht sicher ist wieviel Zeit diese oder jene Aktion braucht, betrachtet man das Ergebniss doch einfach auf dem oszilloskop.
Das wird aber ein ziemlich langwieriges rumprobiere. Man kann bei
Hochsprachen nicht unbedingt vorhersagen, wie lange ein bestimmter
Quellcode-Block nachher für den Ablauf benötigt. Da hängt die Optimierung,
die Sprache selbst, Variablentypen, ... mit drin. Und wenn man das Programm
ändert, kann auf einmal durch optimierungen und Verschiebungen ne ganz
andere Ablaufzeit rauskommen. Genaue Zeitdefinitionen gehen meiner
Meinung nach nur in Assembler. Das ein compilierter Quelltext eine
bestimmte Zeit für den Ablauf benötigt und eine bestimmte Größe im Speicher
braucht würde ich mich hüten vorherzusagen. So etwas kann man nur in
Assembler vorhersagen.

Angenommen ein Schachbrettmuster:
Man muss nur 2 Routinen Schreiben die die 2 verschiedenen Zeilenarten, welche in einem Schachbrettmuster vorkommen, anzeigen.
Diese Routinen müssen innerhalb von, den 52us entsprechenden, 1000Takten(Annahme ist ein 20Mhz AVR) die Farbe ein paar Male wechseln. Innerhalb des Verlaufes einer Zeile eines BAS Signals hat der AVR etwa, 100Takten entsprechende, 5,8us Zeit zu ermitteln welche der beiden Zeilen er anzeigen muss und die entwprechende Routine zu starten. Etwas das, so wie ich denke, auch mit Bascom schaffbar ist.
Schachbrettmuster habe ich ja schon selber als mögliches Muster aufgezählt.
Es ist einfach umzusetzen und vom Timing nicht allzu fein. Das wäre möglich.

Was den Interrupt für die Synchronisation angeht besteht für diesen, sofern man den rechten Bildschirmrand nicht einbüßen möchte, ein Budget von 30Takten bzw 1,5us.
Deshalb ist es, so wie ich denke, möglich soetwas selbst mit Bascom ohne brutale Assemblereingriffe durchzuführen.
Wenn man innerhalb der ISR nur kurz mal nen Pin toggelt ist das kein Problem.
Für kompliziertere Sachen wird da bei Hochsprachen aber nicht sehr viel
Reserve sein.

Bei meinem I2C-Analyzer hab ich das ja mal berechnet und bei 100kHz-SCL
selbst bei Assembler sicherheitshalber ne Hardware-Entlastung mit 2 Gattern
gebaut. Das schafft Luft für Quellcode. Wenn die Luft ausreicht werde ich
evtl sogar 400kHz I2C analysieren können. Aber da würde ich jetzt noch nicht
die Hand für in Feuer legen. Es ist alles eine Sache des Gehirnschmalzes und
wie gut man die benötigten Signale mit der vorhandenen Hardware erzeugen
kann. Mit weiteren Timern/Vergleichsregistern/Speichertabellen, ... wird man
auch kompliziertere Muster mit Hochsprachen erzeugen können. Ich schätze
mal, wenn man nen Mega mit 6 Timern hätte könnte man auch mit 16MHz
schon einiges auf die Beine stellen. Wenn man dann genug SRAM/Flash hat
und die Muster bereit fertig aus dem Speicher nur noch auf die Ausgänge
knallt kann man da einiges machen. Aber wie gesagt ist das alles eine Sache
der Hardware und wie gut man die für eine Aufgabe einsetzen kann.

1er Timer/Zähler für Horizontal-Sync
2er Timer/Zähler für Vertikal-Sync
3er Timer/Zähler für Pixelmuster in der Zeile
... naja die restlichen kann man bestimmt auch irgendwie verbraten ;)

mit dem 3ten könnte man dann in festem Timing Daten aus dem Flash ziehen
und die Daten über ein Hardware-Schieberegister als Pixelmuster rauswerfen.
Wenn man jetzt 3 Schieberegister (zB 3 USARTS) hätte konnte man das
Muster sogar mit RGB-Farben versehen. Und innerhalb einer ISR 3 Bytes
aus dem Flash laden und in 3 Hardware-Register knallen, das müßte sogar ne
Hochsprache schaffen :rolleyes: Man muß nur alle 3 Schieberegister zur
selben Zeit starten damit man keine vermatschten Pixel hat :D

Aus dem Grund würde ich auch nicht sagen, das es überhaupt nicht geht.
Nach James Bond: Sag niemals nie ! - Es bleibt immer irgendwo eine
Restchance übrig :D

Gruß
Dino
 
Da muss ich dir in allen Punkten Recht geben.
Schachbrettmuster habe ich ja schon selber als mögliches Muster aufgezählt.
Es ist einfach umzusetzen und vom Timing nicht allzu fein. Das wäre möglich.

Hab ich wohl überlesen. Damit bist du dann wohl auch auf Seiten derer die meinen es wäre eindeutig möglich?
Mehr als sowas war nämlich meiner Interpretation nach nicht gefragt.:D
 
Hi Nomis,

Damit bist du dann wohl auch auf Seiten derer die meinen es wäre eindeutig möglich?
ich hab den Punkt "Ich kann es NICHT ausschließen" gewählt. "Überhaupt
nie nicht" ist mir zur einen Seite zu extrem und "Eindeutig möglich" zur anderen
Seite. Wennn ich es selber schon einmal zum laufen gebracht hätte, dann
würde ich den Punkt nehmen. Aber sonst bin ich nicht so für extreme Werte
zu haben. ;)

Gruß
Dino
 
Allo, also ich habe ja eigentlich die Frage gestellt.
Aber ich würde sagen, dass wenn man die Timer richtig einsetzt und nicht sinnlos verbratet, kann man an Hardware schon einiges automatisch erledigen lassen.

Gerade die Sync-Generierung braucht keinen Code. Das kann man ja mit der PWM realisieren. Braucht man nur noch den Zeitpunkt für den VSync.

Dann kommen die Zeilen dran.
 
Hallo zusammen,

Nachdem die Umfrage ja jetzt so gut wie beendet ist, komme ich zu folgendem Ergebnis:

Keiner glaubt, dass es nicht geht. - Das ist schon mal gut.
Dann scheiden sich aber die Geister, ob es nun "nur" vielleicht oder 100%ig geht.

Schade, dass sich nicht mehr User an der Umfrage beteiligt haben. Das wäre interessant gewesen zu sehen, wie die Anteile der C- Assembler und Bascom-Programmierer sind.

Trotzdem möchte ich das mal auflösen.

Also es ist nicht nur möglich, sondern es geht: Mit Bascom ein Videogenerator zu programmieren.
Klar braucht man Inline-Assembler als Hilfsmittel. Nur rein in Basic habe ich es erst gar nicht versucht.

Hier ist der Beweis: http://mitchsoft.de/Elektronik/Projects/BildmusterGenerator/index.html

Das Projekt ist noch nicht fertig, aber ein Gittermuster und Horizontale Linien kriege ich auch noch hin - sobald ich Zeit finde weiter zu proggen.

Danke an alle, die sich an der Umfrage beteiligt haben.

Gruß Mitch.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)