Hallo,
ich bin neu hier und ich habe auch schon die suche benutzt. Aber das hat
nicht so ganz das ergeben, was ich wollte.
Ich habe jetzt seit ein paar Tagen mit C programmieren angefangen und
auch bereits kleinen erfolge verzeichnen können, wie zb. benutzung einer
LED als Fotodiode, oder benutzen des AVRs, als kleinen Audio verstärker
(allerdings sehr schlechter klang),... etc.
Nun möchte ich meinen TV als Display nutzen. Mir ist auch bekannt, das
dies viel Speicher in anspruch nimmt, da das BAS Signal per software
generiert wird.
Auch habe ich solche Projekte bereits gefunden. Aber ich möchte es
selber programmieren und mir meinen Code nicht zusammen basteln.
Ziel ist es, den TV wie ein LCD Display anzusprechen. Sprich auswählen,
wo was hinsoll und das dann ausgeben lassen.
Meinetwegen kann das alles auch von einem Atmega 8 als BAS signal
erzeuger übernommen werden, während ein anderer AVR sich um das
Hauptprogramm bemüht.
Eine hohe Auflösung brauche ich erstmal nicht. 6 Zeilen mit 12 Spalten
würden erstmal reichen.
Bis jetzt habe ich einen weißen horizontalen Strich auf den TV bekommen.
Ich habe den AVR auf 8 MHz getaktet, aber mit internem Oszilator.
Per _delay_us() habe ich pausen erzeugt, für zb. das Sync Signal.
Als schaltung habe ich einen 450 ohm und einen 900 ohm widerstand
benutzt.
Somit kann ich theorethisch drei farben erzeugen(Schwarz, Grau und
Weiß).
Bitte helft mir :D
MfG Alex
EDIT: Hier nochmal der neu entwickelte Code einfach nur um graue und
weiße balken darzustellen. Funzt aber nicht.... Ich bin schon am
verzweifeln.
1 | #include <avr/io.h>
|
2 |
|
3 |
|
4 | int main(void)
|
5 | {
|
6 | DDRC = 0b00000011; //PINC0 = 900ohm / PINC1 = 450ohm
|
7 | //00=Sync=0v; 01=Schwarz=0,3v; 10=Grau=0,7v; 11=Weiß=1v
|
8 | PORTC = 0b00000000;
|
9 | int n=1; //Zaehler pro Halber Scanline
|
10 | TCCR1B = 0b00000001; //no prescaling
|
11 |
|
12 |
|
13 | while(1)
|
14 | {
|
15 | //Vortrabanten
|
16 | if(n == 621|622|623|624|625 && TCNT1 < 17)
|
17 | {
|
18 | PORTC = 0b00000000;
|
19 | }
|
20 | if(n == 621|622|623|624|625 && TCNT1 > 16 && TCNT1 < 257)
|
21 | {
|
22 | PORTC = 0b00000001;
|
23 | n ++;
|
24 | if(TCNT1 == 256)
|
25 | {
|
26 | TCNT1 = 0;
|
27 | }
|
28 | }
|
29 | //Hauptimpulse; Trabanten
|
30 | if(n == 1|2|3|4|5 && TCNT1 < 218) //CPU Takt bei ca. 8 MHz; 218 ~ 27,3us
|
31 | { //1 us entspricht 8 Timer schritten
|
32 | PORTC = 0b00000000;
|
33 | }
|
34 | if(n == 1|2|3|4|5 && TCNT1 > 217 && TCNT1 < 257) //Nach langen syncimpulsen folgt
|
35 | {
|
36 | PORTC = 0b00000001;
|
37 | n ++; //n um eins erhöhen, da eine halbe Scanline um
|
38 | if(TCNT1 == 256)
|
39 | {
|
40 | TCNT1 = 0;
|
41 | }
|
42 | }
|
43 | //Nachtrabanten
|
44 | if(n == 6|7|8|9|10 && TCNT1 < 17)
|
45 | {
|
46 | PORTC = 0b00000000;
|
47 | }
|
48 | if(n == 6|7|8|9|10 && TCNT1 > 16 && TCNT1 < 257)
|
49 | {
|
50 | PORTC = 0b00000001;
|
51 | n ++;
|
52 | if(TCNT1 == 256)
|
53 | {
|
54 | TCNT1 = 0;
|
55 | }
|
56 | }
|
57 | //1. Halbbilder
|
58 | if(n > 10 && n < 620 && TCNT1 < 33) //Hsyncimpuls
|
59 | {
|
60 | PORTC = 0b00000000;
|
61 | }
|
62 | if(n > 10 && n < 620 && TCNT1 > 32 && TCNT1 < 81) //vordere Schwarzschulter
|
63 | {
|
64 | PORTC = 0b00000001;
|
65 | }
|
66 | if(n > 10 && n < 620 && TCNT1 > 80) //Scanline
|
67 | {
|
68 | if(TCNT1 < 200)
|
69 | {
|
70 | PORTC = 0b00000010; //grau
|
71 | }
|
72 | if(TCNT1 > 199 && TCNT1 < 300)
|
73 | {
|
74 | PORTC = 0b00000011; //weiß
|
75 | }
|
76 | if(TCNT1 > 299 && TCNT1 < 497)
|
77 | {
|
78 | PORTC = 0b00000001; //schwarz
|
79 | }
|
80 |
|
81 | }
|
82 | if(n > 10 && n <= 620 && TCNT1 > 496 && TCNT1 < 513) //hintere Schwarzschulter
|
83 | {
|
84 | PORTC = 0b00000001;
|
85 | n ++;
|
86 | if(TCNT1 == 512)
|
87 | {
|
88 | TCNT1 = 0;
|
89 | }
|
90 | }
|
91 |
|
92 | if(n == 621) //n zuruecksetzen, damit die schleife wieder beginnen kann
|
93 | {
|
94 | n = 1;
|
95 | }
|
96 |
|
97 | }
|
98 | }
|