Hi Trabukh!
Wenn Du mir den Programmablauf genau in der Reihenfolge usw. sagst, dann könnte ich ihn Dir z.T. vielleicht proggen!
Aber versprechen kann ich nichts! ;o)
Druckbare Version
Hi Trabukh!
Wenn Du mir den Programmablauf genau in der Reihenfolge usw. sagst, dann könnte ich ihn Dir z.T. vielleicht proggen!
Aber versprechen kann ich nichts! ;o)
Ist es nicht eh so, dass Die AVRs entsprechend ihrer Taktrate auch befehle druchkriegen, also bei 12 Mhz auch 12 Millionen Befehle rechnen?Zitat:
On a PIC16F84 @ 12Mhz, 3 million instructions per seconds are performed
Dann würde man das Timing besser hinbekommen.
Vor allem verstehe ich die vertikala Synchronisation noch nicht ganz. Für was genau stehen die Zahlen unter dem Signal in diesem Bild?
http://www.rickard.gunee.com/project..._vsync_big.png
(Alles Bezogen auf http://www.rickard.gunee.com/project.../pic/howto.php)
Die stehen für die jeweilige Bildzeile. Glücklicherweise schaffen AVRs auch pro Takt einen Befehl, sodass man nicht wie im Beispiel von 3 Mips, sondern etwa 16 Mips ausgehen kann. Ich denke, mit dieser Frequenz kann man schon sehr viel anfangen...
Gruß, Trabukh
@Florian: Ich werd' mir den Aufbau nochmal genau angucken, und dann sehen wir weiter, aber schon mal VIELEN DANK für das Angebot!
hallo, habe mir einen at90s8515 gekauft und die
schaltung auf dem steckbrett aufgebaut. das hex-programm
mahpong.hex funktioniert zu 100%. im album unter roboterbilder habe
ich 2 bilder reingestellt. eins vom steckbrett und ein bild
vom bildschirm auf dem pc unter wintv. jetzt muss nur noch versucht werden, dieses einmal auf den avr16 zu generieren unter bascom.
aber läuft schon einmal.
mfg pebisoft
hallo, mit diesem kurzen programm habe ich das streifenbild mit bascom erstellt. siehe "album, roboterbilder".
$regfile = "m16def.dat"
$crystal = 8000000
Enable Interrupts
Config Pind.5 = Output
Config Pind.6 = Output
Portd.5 = 0
Portd.6 = 0
Waitms 100
Do
Portd.6 = 1
Portd.5 = 1
Portd.6 = 0
Portd.5 = 0
Loop
mfg pebisoft
Nicht schlecht, im Grunde ja ganz simpel. aber man sieht auch, wie "breit" die streifen schon sind, und das obwohl ja noch ganix nebenbei berechnet wurde.
Wenn ich das richtig verstehe, entsteht ein schwarzer Streifen, wenn beide auf 0 sind und ein weißer, wenn beide 1 sind. Und da sieht man schon, dass die schwarzen streifen nur durch die "do-loop"-Anweisung dicker sind.
Ich denke an ASM führt kein Weg vorbei.
MFG Moritz
Bascom übersetzt den Basic Code auch in Assembler und bei die Befehle do, loop und die die in Pebi-Softs Programm dazwischen stehen sind ziemlich elementar. Wandelt Bascom die wirklich so viel schlechter um, als man es direkt in Assembler selber programmieren könnte?Zitat:
Wenn ich das richtig verstehe, entsteht ein schwarzer Streifen, wenn beide auf 0 sind und ein weißer, wenn beide 1 sind. Und da sieht man schon, dass die schwarzen streifen nur durch die "do-loop"-Anweisung dicker sind.
Ich denke an ASM führt kein Weg vorbei.
Viel Luft dürfte da bei dem verwendeten 8 MHz Quarz sowieso nicht bleiben.
Soweit ich weiss beträgt die Zeilenfrequenz eines Fernsehers 15600 Hz und eine Zeile besteht aus ca. 700 Bildpunkten.
15600kHz*700= ca. 11MHz
D.h. eine Streifenbreite von 1 Bildpunkt kann bei 8 MHz auch in Assembler eigentlich nicht funktionieren. Oder habe ich da einen Denkfehler drin?
Vllt könnte mal jemand aus der ASM-Riege hier versuchen, so ein Streifentestbild zu machen, dann hätte man eine Vorstellung der möglichen Auflösung mit einem ATmega.
Gruß, Trabukh
Hallo,Ja, genau sind es 15625Hz, entsprechend 64us Zeilendauer.Zitat:
Zeilenfrequenz eines Fernsehers 15600 Hz und eine Zeile besteht aus ca. 700 Bildpunkten.
"Bildpunkte" im eigentlichen Sinne gibt es dort nicht,
weil das Videosignal ja analog ist.
Es hat meines Wissens nach im Schwarz-Weiss-Bereich
eine Bandbreite von 5Mhz.
Der "sichtbare Bereich einer Bildzeile ist etwa 52us lang.
Das ergibt bei 5MHz etwa 260 SW-Wechsel pro Zeile,
also wären 520 Bildpunkte darstellbar.
Ein ATMega8 mit 8MHz könnte mit der Befehlsfolge in Beispiel-1
ein Rechteck mit einer Frequenz von 2 Mhz
an PortB ausgeben.
Ein Mega8 mit 8MHz könnte also maximal 400 Bildpunkte pro Zeile anzeigen.
Das ist allerdings mehr als theoretisch,
denn dann dürfte er gar nichts anderes mehr tun,
nicht mal entscheiden ob der nächste Bildpunkt an oder aus sein soll.
Etwas realistischer ist Beispiel-2. Hier werden Bildpunkte
aus einem Bildspeicher im internen RAM gelesen und ausgegeben.
Das schafft der Mega8 mit etwa 200 Bildpunkten pro Zeile,
wenn er nix anderes macht.
Diese Punkte könnten aber 64 Graustufen haben.
Also realistisch dürfte max. die Hälfte sein.
Das wären dann immerhin noch um die 100 Bildpunkte,
da könnte man schon was mit machen.
Und den Mega-8 gibt es ja auch mit 16MHz, :-)
Aber zumindest den Kern müsste man auf jeden Fall
mit "Handoptimiertem" Assemblercode machen.
Gruß Jan
Code:Unvollstädige Codefragmente für Abschätzung TV-Ausgabe mit ATMega-8
;Beispiel-1
;2Mhz an PortB Bit0 ausgeben
ldi r16,0
ldi r17,1
loop: out portb,r16
out portb,r17
rjmp loop
;Beispiel-2
;Bildpunkte aus Bildspeicher vidmem lesen
und an PortB augeben.
ldi ZH,high(vidmem<<1)
ldi ZL,low(vidmem<<1)
loop: lpm
out r0,portb
adiw Z,1
rjmp loop
Hallo,
ich hab mir mal die Mühe gemacht, und die Streifen
in Pebisofts Streifenbild gezählt. Ich komme auf 36.
das entspricht umgerechnet mit den 52us knapp 700kHz.
Der AVR ist also schon bei dieser simplen Schleife in
Assembler etwa dreimal so schnell wie Bascom. (2MHz zu 700KHz)
Oder lässt sich das in Basic noch optimieren ?
Weil da immer zweimal portd.x=y steht ?
Schöne Grüße... Jan