Forum: Compiler & IDEs Probleme C Source in HEX zu compilieren?


von Peter Sieg (Gast)


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

von Johannes M. (johnny-m)


Lesenswert?

Jo, das ist definitiv nicht für den AVR-GCC-C-Compiler geschrieben. 
Allein die #includes sind schon falsch. Könnte CodeVision sein, andere 
kommerzielle Compiler für AVR kenne ich allerdings nicht und kann sie 
deshalb auch nicht ausschließen.

von Joachim Müller (Gast)


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

von Peter Sieg (Gast)


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

von Peter Sieg (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter Sieg wrote:

> Trotz NTSC müßte ich doch eine S/W Darstellung sehen können..?

Naja, NTSC ist ja nicht alles.  Es gibt ...zig verschiedene
Basis-Fernsehnormen, die sich insbesondere in den Bild- und
Zeilenfrequenzen unterscheiden.

von Peter Sieg (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Peter Sieg (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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. ;-)

von Peter Sieg (Gast)


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

von Peter Sieg (Gast)


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

von Peter Sieg (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.