Probleme C Source in HEX zu compilieren?

Gast #683712
Lesenswert?

Hallo. Bin blutiger Änfänger was AVR+GCC abgeht ;-)

Möchte diese beiden Projekte nachbauen:

http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2004/kfm9/index.htm
http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2005/gts7/index.html

Habe winavr 4.1.1 installiert. Die Examples /twitest lassen sich ohne 
Probleme compilieren. Installation sollte also ok sein..

Ich habe den Makefile aus dem sample Ordner verwendet (mcu, f_cpu, 
target angepasst ;-).

Aber ich bekommen eine 'Haufen' Fehlermeldungen.. #pragma ?? v1 v2 
undefined?
Fehle da was? Ist das evtl. für einen anderen C-Compiler geschrieben?
Ich bin zu blöd (ziemlich sicher)

Wäre toll, wenn mir da wer weiterhelfen könnte.

Danke, Peter
Gast #683780
Lesenswert?

Zitat:
"For all examples, be sure to set the CodeVision compiler controls (in 
the Project:Configure...  menu) to:..."

Einfach nicht nur saugen, sondern auch mal die Links abklappern :-)

Joachim
Gast #683824
Lesenswert?

ok, sorry. Das habe ich auch jetzt beim 2ten schauen immer noch nicht 
gefunden..?

Habe mir mal die Eval. Version geladen. Läßt sich compilieren ohne 
Error's..
Habe die Codesize liegt natürlich über den 2kb..
Und 90€ sind mir leider etwas zu viel..

Kann mir hier jemand das durch einen registierten CodeVision Compiler 
jagen und mir die HEX-Dateien senden (ATmega32 16MHz)?

Kann man das rel. leicht nach winavr umsetzen?

Danke, Peter
Gast #683936
Lesenswert?

Hups.. Für ATmega reicht ja noch nicht einmal die Light Version.. Also 
Standard = 150 Teuro's - Wahnsinn..

Bin bereit einen kleinen Obulus für fertige HEX Dateien zu entrichten..
Trotz NTSC müßte ich doch eine S/W Darstellung sehen können..?

Peter
Gast #683985
Lesenswert?

Hmm. Habe jetzt fertige HEX-Dateien erzeugt. Wenn die nächste Reichelt 
Lieferung kommt, werde ich mal kurz aufbauen und einfach probieren, ob 
ich ein Bild bekomme... berichte dann an dieser Stelle wieder..

Danke+Gruß Peter
Moderator Persönliche Seite #684072
Lesenswert?

//cycles = 63.625 * 16 Note NTSC is 63.55
//but this line duration makes each frame exactly 1/60 sec
//which is nice for keeping a realtime clock

Das sagt eigentlich alles.  Die 63.625 µs wären sicher verkraftbar
(wir arbeiten mit 64 µs offiziell), aber 60 Hz Bildwiederholfrequenz
wird deine Glotze wahrscheinlich nicht können.  50 Hz sind bei uns
die Norm.  Kann sein, dass es genügt, das hier anzupassen:

if (LineCount==231)

Hmm, knapp 3800 Zeilen Code in einer C-Datei, ist erstaunlich, dass
da noch einer durchgeblickt hat.
Gast #684587
Lesenswert?

1
//cycles = 63.625 * 16 Note NTSC is 63.55
2
//but this line duration makes each frame exactly 1/60 sec
3
//which is nice for keeping a realtime clock
4

5
Das sagt eigentlich alles.  Die 63.625 µs wären sicher verkraftbar
6
(wir arbeiten mit 64 µs offiziell), aber 60 Hz Bildwiederholfrequenz
7
wird deine Glotze wahrscheinlich nicht können.  50 Hz sind bei uns
8
die Norm.  Kann sein, dass es genügt, das hier anzupassen:
9

10
if (LineCount==231)
11

12
Hmm, knapp 3800 Zeilen Code in einer C-Datei, ist erstaunlich, dass
13
da noch einer durchgeblickt hat.

Nun, da ich auf reichelt warte, dachte ich mir ich könnte schon mal in 
den C-Code schauen.. falls ich doch von NTSC auf PAL umstellen 
muß/möchte..

Lt. wikipedia:
NTSC -  PAL
60Hz -  50Hz
525Z -  625 Zeilen

was soll die cycles = 63.625 * 16 bedeuten?
63.625 = Zeitdauer für 1 Fernsehzeile in us.
* 16 ??? von 16MHz, mit dem der AVR betrieben wird?
Gesetzt wird die Variable: linetime=1018 mit dem Ergebnis aus 63.625*16

Für 64us * 16 würde sich hier 1024 ergeben..? Wäre das an dieser Stelle 
zu setzen für PAL?

---

Dann kommt wohl die Stelle 'if (LineCount==231)' ab der unter anderem 
die Synchronisierung für die Fernseh-Seite generiert wird. Dies passiert 
wohl für NTSC alle 1/60 s. Aber wo wird das gesteuert? Da müßte doch ein 
Timer oder sowas getriggert werden..?

Warum müßte ich linecount==? verändern? Dann vermutlich höher, damit der 
Aufbau 1 Seite länger dauert (eben nicht 1/60s, sondern 1/50s)?

(Ja, ja.. schon wieder so ein Dummy, der lieber mal RTFM sollte ;-)

Peter
Moderator Persönliche Seite #684609
Lesenswert?

Peter Sieg wrote:

> Nun, da ich auf reichelt warte, dachte ich mir ich könnte schon mal in
> den C-Code schauen.. falls ich doch von NTSC auf PAL umstellen
> muß/möchte..

> Lt. wikipedia:
> NTSC -  PAL
> 60Hz -  50Hz
> 525Z -  625 Zeilen

Naja, die Überschrift "NTSC vs. PAL" stimmt nicht ganz, es ist eher
Norm B vs. Norm M:

http://de.wikipedia.org/wiki/Fernsehnorm#Schwarzwei.C3.9F

Aber ansonsten stimmt das.

> was soll die cycles = 63.625 * 16 bedeuten?
> 63.625 = Zeitdauer für 1 Fernsehzeile in us.
> * 16 ??? von 16MHz, mit dem der AVR betrieben wird?

Ja, du hast also 16 CPU-Takte pro Mikrosekunde.  Das ist der Wert, der
irgendwo dann in einen Timer gefüttert wird.  Der liefert dann den
Horizontal-Synchronimpuls, d. h. damit beginnt eine neue Zeile.

> Für 64us * 16 würde sich hier 1024 ergeben..? Wäre das an dieser
> Stelle zu setzen für PAL?

Ja, kannst du probieren.

> Dann kommt wohl die Stelle 'if (LineCount==231)' ab der unter
> anderem die Synchronisierung für die Fernseh-Seite generiert
> wird. Dies passiert wohl für NTSC alle 1/60 s. Aber wo wird das
> gesteuert? Da müßte doch ein Timer oder sowas getriggert werden..?

Es genügt, einen Teil mit dem Timer zu steuern, also die
Zeilenfrequenz.  Danach musst du nur noch die Zeilen zählen, damit
ergibt sich die Bildsynchronisation von allein.

Zu beachten ist, dass diese einfachen BAS-Generatoren keinen
Zeilensprung generieren (englisch: interlace), daher sind die
Zeilenzahlen in diesen Rechnungen nur halb so groß wie die, die der
Fernsehnorm zu Grunde liegen.  Das Norm-M-Bild hat als hier 262 Zeilen
(zwischen den Vertikal-Synchronimpulsen), daher beginnt bei Zeile 231
die Bildaustastlücke (da wird für den Strahlrücklauf nach oben dunkel
getastet).  Das Norm-B-Bild hätte 312 Zeilen, da musst du nun (zum
Beispiel empirisch nach ,,Aussehen'' -> kein schwarzer Balken oben
oder unten) ermitteln, ab welcher Zeile die Austastlücke beginnt.
Wenn ich mich dunkel an die alte selbstgebaute Bildschirmsteuerung
meines ersten Eigenbau-Computers erinnere, so begann dort die
Austastlücke nach 256 Zeilen (was sehr praktisch für den Aufbau des
Bildwiederholspeichers war).

Ich weiß nicht, ob sich der Rest dann von selbst ergibt in dem
Programm.  Kann natürlich sein, dass er einfach nicht in der Lage ist,
die Zeilen von 231 bis 256 mit irgendwelchen Inhalten zu füllen, d. h.
das Bild wird bei dir ein wenig ,,gequetscht'' aussehen.  Du kannst
auch probieren, die Bildwiederholfrequenz ein wenig nach oben zu
ziehen, musst halt gucken, wie viel die Synchronisation deiner Glotze
noch gewillt ist mitzugehen.  Alte Glotzen mit von außen zugänglichem
Vertikalfrequenzsteller sind da natürlich ein wenig im Vorteil.
Gewissermaßen poor man's Multinorm-Fernseher. ;-)
Gast #684738
Lesenswert?

Danke ersteinmal für die prompten und ausführlichen Antworten!
Das macht mich doch zuversichlicht, das hin zu kriegen..

Ich habe den code jetzt mal so umgestellt und eine HEX Datei damit 
erzeugt:
(Die Variablen TV_xxx habe ich natürlich weiter unten im code eingefügt 
und die Konstanten ersetzt ;-)
1
//==============================================================================
2
//                          TV Variable Declarations
3
//==============================================================================
4
// for PAL comment the define NTSC 1 and uncomment the define PAL 1
5
//#define NTSC 1
6
#define PAL 1   
7
#ifdef NTSC
8
//cycles = 63.625 * 16 Note NTSC is 63.55 
9
//but this line duration makes each frame exactly 1/60 sec
10
//which is nice for keeping a realtime clock 
11
//NTSC uses 262 lines, PAL uses 312 lines (for half picture)
12
#define lineTime 1018
13
#define ScreenTop 30
14
#define ScreenBot 230
15
#define TV_BOT 231
16
#define TV_VSS 248
17
#define TV_VSE 251
18
#define TV_SNF 263
19
#endif
20
#ifdef PAL
21
//cycles = 64 * 16 = 1024
22
#define lineTime 1024
23
//312 - 262 = +50
24
//need to adjust screen painted area to the middle by adding 50/2=25 lines to top and bottom
25
#define ScreenTop 55
26
#define ScreenBot 255
27
//NTSC value +50
28
#define TV_BOT 281
29
#define TV_VSS 298
30
#define TV_VSE 301
31
#define TV_SNF 313
32
#endif

Mal sehen.. kann ich leider erst probieren, wenn die Hardwareteile da 
sind..

Evtl. bekommt ja hier jemand Lust, sich die Teile auch nachzubauen..

Peter
Gast #687727
Lesenswert?

Kurzer Zwischenstand.
Gerät ist aufgebaut und geht. NTSC Version läuft am CBM BAS Grünmonitor.
Bei der versuchten PAL Version ist die Bildschirmanzeige ca. 3-5cm nach 
oben verschoben und der untere Bildschirm enthält 'Schmutzzeilen' etc.
Da muß ich also noch mal schauen.. genauso wie mir das Ganze am TV 
anzusehen..

Peter
Gast #688551
Lesenswert?

So.. auch am PAL TV läuft die NTSC Version ohne jedes Problem..?
Ist ein älteres 37cm TV. Anschluß über Cinch-Scart Adapter..

Hmm.. also geht bei mir zumindestens ohne Softwareanpassungen..

Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren