mikrocontroller.net

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


Autor: Peter Sieg (Gast)
Datum:

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

Möchte diese beiden Projekte nachbauen:

http://instruct1.cit.cornell.edu/courses/ee476/Fin...
http://instruct1.cit.cornell.edu/courses/ee476/Fin...

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joachim Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)
//==============================================================================
//                          TV Variable Declarations
//==============================================================================
// for PAL comment the define NTSC 1 and uncomment the define PAL 1
//#define NTSC 1
#define PAL 1   
#ifdef NTSC
//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 
//NTSC uses 262 lines, PAL uses 312 lines (for half picture)
#define lineTime 1018
#define ScreenTop 30
#define ScreenBot 230
#define TV_BOT 231
#define TV_VSS 248
#define TV_VSE 251
#define TV_SNF 263
#endif
#ifdef PAL
//cycles = 64 * 16 = 1024
#define lineTime 1024
//312 - 262 = +50
//need to adjust screen painted area to the middle by adding 50/2=25 lines to top and bottom
#define ScreenTop 55
#define ScreenBot 255
//NTSC value +50
#define TV_BOT 281
#define TV_VSS 298
#define TV_VSE 301
#define TV_SNF 313
#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

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Sieg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.