Forum: Mikrocontroller und Digitale Elektronik 8051-Code auf AVR-Platine STK500 übertragen


von Eric S. (eazy)


Angehängte Dateien:

Lesenswert?

Hallo liebe µC-Freunde!

Ich stehe vor einem Problem und brauche bitte eure Hilfe:

Die AVR-Platine STK500 möchte ich zum ersten Mal in Betrieb nehmen. Als
Rechner verwende ich den Atmega16. Im Anhang habe ich ein C-Programm
geschieben unter der Verwendung des µC 8051 und deren Befehle.
Dieses Programm lässt die LED's auf dem Demoboard im zeitlichen Abstand
von 0,5 s blinken.
Nun möchte ich aber auch, dass das Programm unter der STK500 Platine und
dem Atmega16 Rechner angepasst wird.
Dabei möchte ich es so erstellen, dass man es auch leicht an andere
Rechner anpassen kann.
Wie ist das Problem zu lösen bzw. wie sieht dann der Pseudocode & C-Code
aus?

Leider habe ich bisher überhaupt keine Erfahrung mit AVR, sondern nur
mit Intel 8051. Ich quäle mich durch die engl. Anleitung durch - nur
leider verstehe ich nicht gerade viel davon.

Ich würde mich über eure Unterstützung sehr freuen. Bei Problemen mit
8051 könnt ihr euch gerne an mich wenden. Da denke ich, habe ich es gut
drauf :-)

Vielen Dank!

von MC (Gast)


Lesenswert?

Tag Eric,
wieso möchtest du zu den AVRs wechseln?
Bis irgendwann,
MC

von Eric S. (eazy)


Lesenswert?

Ganz ehrlich, aus reiner Interesse und Spaß! Es schadet nie sein Wissen 
zu erweitern!

von Joe (Gast)


Lesenswert?

Eric, der Code sieht nach einem Assembler Code aus der in C 
umgeschrieben wurde.

Warum kümmerst du dich um den Stack in C ?

Mach dich mit dem Timertutorial und dem WINAVR auf dem Weg. Du wirst 
nicht umhinkommen dir die Grundlagen anzusehen.

Wo stehst du den Wissenstechnisch ?

von Eric S. (eazy)


Lesenswert?

Joe wrote:
> Eric, der Code sieht nach einem Assembler Code aus der in C
> umgeschrieben wurde.
>
> Warum kümmerst du dich um den Stack in C ?
>
> Mach dich mit dem Timertutorial und dem WINAVR auf dem Weg. Du wirst
> nicht umhinkommen dir die Grundlagen anzusehen.
>
> Wo stehst du den Wissenstechnisch ?

Das ist auch ein Assembler-Code der in C umgeschrieben wurde. Den 
Assembler Code kann ich dir gerne auch zukommen lassen.

Es ist sehr interessant das auch einmal in C zu machen und es 
anschließend zu testen und es funktioniert.

Sorry, aber mein Wissen was AVR angeht ist leider gleich 0,5%. Und engl. 
verstehe ich leider auch nicht so gut. Mit dem AVR komme ich irgendwie 
nicht ganz so klar.

von Joe (Gast)


Lesenswert?

Ich stelle die Frage mal anders, kannst du C ?? Also bei mir würde die 
gleiche Aufgabe, respektive Lösung etwas anders aussehen. Allerdings 
kenne ich die 8x51 Derivate in ASM und C aus dem FF.

Ebenso AVR's und andere... Also, noch einmal die Frage: Wo stehst du.

Das Tutorial ist doch in deutsch. Wo ist das Problem ? Wenn du die Timer 
im 8051 verstanden hast dann kannst du auch die Timer des AVR verstehen.

Ich liefer dir jedenfalls keine Übersetzung frei Haus, dabei lernt man 
nix.

von Eric S. (eazy)


Lesenswert?

Joe wrote:
> Ich stelle die Frage mal anders, kannst du C ?? Also bei mir würde die
> gleiche Aufgabe, respektive Lösung etwas anders aussehen. Allerdings
> kenne ich die 8x51 Derivate in ASM und C aus dem FF.
>
> Ebenso AVR's und andere... Also, noch einmal die Frage: Wo stehst du.
>
> Das Tutorial ist doch in deutsch. Wo ist das Problem ? Wenn du die Timer
> im 8051 verstanden hast dann kannst du auch die Timer des AVR verstehen.
>
> Ich liefer dir jedenfalls keine Übersetzung frei Haus, dabei lernt man
> nix.

Ja C kann ich mehr oder weniger, allerdings nicht aus dem FF - nur die 
Grundlagen.

Ich finde kein Turtorial des Atmega16 und der STK500 Platine auf 
deutsch.
Alles ist nur auf engl. in der Atmel HP und sonst wo.
Den Timer des 8051 habe ich schon ein wenig verstanden, aber auch nicht 
perfekt. Wie soll es denn dann beim AVR klappen?

Schade das du mir keine Übersetzung frei Haus lieferst. Somit stehe ich 
wieder bei dem gleichen Problem wie zuvor! Mir einer Lösung kann ich es 
viel besser verstehen, nachvollziehen und vergleichen. Ich habe mir hier 
schon genug den Kopf zerbrochen und deshalb bitte ich euch auch um 
Hilfe.

von Peter D. (peda)


Lesenswert?

Zum Thema AVR-Timer findest Du auch hier was:

Beitrag "Die genaue Sekunde / RTC"


Peter

P.S.:
In einem C-Programm den Stack zu setzen ist ober-pfui.
Mit viel Glück passiert nichts schlimmes.

von Joe (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#8-Bit_Timer.2FCounter

Hier gibt es genug in deutscher Sprache.

Zum Stack kann ich Peter nur beipflichten.

> Den Timer des 8051 habe ich schon ein wenig verstanden, aber auch nicht
> perfekt. Wie soll es denn dann beim AVR klappen?

Und genau hier steckt das Problem, du gibst auf halber Strecke auf. Lern 
erst einmal einen Controller kennen und dann den anderen. Ansonsten 
kannst du keinen von beiden.

Sorry, ist aber der beste Rat den ich geben kann.

von Eric S. (eazy)


Lesenswert?

Peter Dannegger wrote:
> Zum Thema AVR-Timer findest Du auch hier was:
>
> Beitrag "Die genaue Sekunde / RTC"
>
>
> Peter
>
> P.S.:
> In einem C-Programm den Stack zu setzen ist ober-pfui.
> Mit viel Glück passiert nichts schlimmes.

Danke für den Link, hilft mir bei meinem Problem nicht.
Den Stack zu setzten ist ganz ok. Es kann auch nie was schlimmes dabei 
passieren!

von Eric S. (eazy)


Lesenswert?

Wie kann ich das so erstellen, dass man es auch leicht an andere
Rechner anpassen kann? Das muss doch irgendwie mit "define" gehen.
Es muss irgendwie in der Main die 8051 Codes in AVR umdefiniert werden 
oder umgekehrt. Wie geht das genau?

von Prof. Dr. Tee (Gast)


Lesenswert?

@Joe
Für was gibts es überhaupt Foren, wenn man keine Hilfe gibt, sondern nur 
sein dummen Senf dazugibt, vonwegen Bücher lesen usw.? Was soll das 
alles? Solche Leute wie ihr habt hier nichts zu suchen. Hilft den Leuten 
bei Problemen und kritisiert nicht nur. Ihr versteht wahrscheinlich 
selbst nichts davon und meint aber immrt das ihr das könnt. Zeigt doch 
mal was ihr könnt! Löst doch dieses Problem und erklärt es dem Eric. 
Macht einmal selbst das PseudoCode und das C-File das er gerne wissen 
würde. So lernt er auch am besten, von Beispielen und Erklärungen. Ich 
bin Prof. und weiß von was ich rede Kinder.

@Peter
Stack ist von Eric ok. Ich weiß nicht was du dagegen hast, vonwegen 
Ober-Pfui. Wieder einmal ein Bsp. für dummes Geschwätz. Hier kann und 
wird auch nichts passieren auch bei viel Pech. Vollkommen richtig gelöst 
von Eric!

Grüße Tee

von Peter D. (peda)


Lesenswert?

Prof. Dr. Tee wrote:

> @Peter
> Stack ist von Eric ok. Ich weiß nicht was du dagegen hast, vonwegen
> Ober-Pfui. Wieder einmal ein Bsp. für dummes Geschwätz. Hier kann und
> wird auch nichts passieren auch bei viel Pech. Vollkommen richtig gelöst
> von Eric!

Quatsch mit Soße !

Dein dummes Geschwätz beweist, Du hast keinerlei Ahnung von C.

Der Stack ist ganz allein Hoheitsgebiet des Linkers und niemand hat ihm 
da reinzupfuschen !

Sobald der Linker eine andere Auffassung hat als Du, wo Variablen und wo 
der Stack liegen, krachts.

Durch das Verbiegen des Stacks überschreibst Du dann munter Deine 
Variablen mit Returnadressen und umgekehrt.


Peter

von Peter D. (peda)


Lesenswert?

Eric Schmitz wrote:

> Danke für den Link, hilft mir bei meinem Problem nicht.

Wenn Du keine Lust hast, Dich mit Beispielen zu beschäftigen, wie willst 
du dann etwas lernen ?

Das Beispiel paßt sehr wohl.

Die 1s auf 0,5s zu ändern ist ein guter Weg festzustellen, ob man es 
auch verstanden hat.


> Den Stack zu setzten ist ganz ok. Es kann auch nie was schlimmes dabei
> passieren!

Es ist ganz und garnicht o.k. !
Siehe Tee-Antwort.


Peter

von Sigint 112 (sigint)


Lesenswert?

Moment! Bitte warten, bis ich mein Popcorn geholt habe....
Die Schlacht möge beginnen. >-]

von Peter D. (peda)


Lesenswert?

Eric Schmitz wrote:
> Wie kann ich das so erstellen, dass man es auch leicht an andere
> Rechner anpassen kann? Das muss doch irgendwie mit "define" gehen.
> Es muss irgendwie in der Main die 8051 Codes in AVR umdefiniert werden
> oder umgekehrt. Wie geht das genau?


Grob gesagt bestehen Programme aus Algorithmen und Hardwarezugriffen 
(Timer, Ports, Interrupts).

Algorithmen sind hardwareunabhängig und laufen ohne Änderung auf jeder 
CPU. Der Complier setzt sie einfach in die entsprechenden 
Maschinenbefehle um.

Hardwarezugriffe mußt Du auf jeder CPU anpassen und zwar durch Lesen des 
Datenblattes.
Z.B. die Timer werden aufm AVR völlig anders angesprochen als aufm 8051.


Nach Defines zu weinen hilft da in keinster Weise weiter.


Peter

von Joe (Gast)


Lesenswert?

> @Joe Für was gibts es überhaupt Foren, wenn man keine Hilfe gibt,
> sondern nur sein dummen Senf dazugibt...

Dumm ist der der dummes tut ;-))

> Den Timer des 8051 habe ich schon ein wenig verstanden, aber auch nicht
> perfekt. Wie soll es denn dann beim AVR klappen?

Nix verstanden aber schon den nächsten MC. Ich hatte Ihm geholfen, nur 
nicht so wie man es gerne hätte.

Herr Professor, ich glaub du hast einem im Tee!! Bring deinen Studenten 
mal eine Sache richtig bei und gehe dann über zu anderen Controllern. 
Ansonsten produzierst du nen Haufen unfähiger Ing. Das scheint 
allerdings bereits etablierter Lehralltag zu sein (ich nenne es Murx).

Ebenso sollte man erst ASM & C richtig erlernen.

Bei vernünftigen Fragen habe ich bisher immer geholfen !!! Arbeit nehme 
ich keinem ab.

von Sigint 112 (sigint)


Lesenswert?

So, jetzt muss ich auch mal meinen Senf los werden....


Prof. Dr. Tee wrote:
> @Joe
> Für was gibts es überhaupt Foren, wenn man keine Hilfe gibt, sondern nur
> sein dummen Senf dazugibt,

Hilfe bekommt man in diesem Forum schon. Aber man darf nicht erwarten, 
daß einem alles vorgekaut wird. Eigeninitiative ist hier oberstes Gebot: 
Wie man in den Wald hineinruft, so schallt es hinaus.


> vonwegen Bücher lesen usw.? Was soll das
> alles?

Als Prof. sollten gerade Sie wissen, daß Bücher eine der wichtigsten 
Informationsquellen waren und sind. Da frage ich mich auch, was das 
soll.

> Solche Leute wie ihr habt hier nichts zu suchen. Hilft den Leuten
> bei Problemen und kritisiert nicht nur.

Manchmal ist konstruktive Kritik das beste Lehrmittel. Nur aus Fehlern 
lernt man wirklich, das hat die Geschichte uns schon oft genug gelehrt.
Und Kritik ist ein Anstoss über seine Fehler nachzudenken.

> Ihr versteht wahrscheinlich
> selbst nichts davon und meint aber immrt das ihr das könnt. Zeigt doch
> mal was ihr könnt!

Niemand weiss alles, das gebe ich zu. Aber oft kann man mit dem geringen 
Wissen trotzdem die richtigen Hinweise geben. Allerdings sollte man dann 
auch sagen, daß man sich nicht wirklich sicher ist.


> Löst doch dieses Problem und erklärt es dem Eric.
> Macht einmal selbst das PseudoCode und das C-File das er gerne wissen
> würde. So lernt er auch am besten, von Beispielen und Erklärungen.

Es gibt diverse Studien die belegen, daß eigene Aktivität den größten 
Lernerfolg liefert. "Learning by doing" geht also über alle anderen 
Lernmethoden. Beispiele und Erklärungen können nur die Grundlage bilden, 
die allerdings noch gefestigt werden muss.
Zudem hat hier wahrscheinlich keiner Lust und/oder Zeit Eric alles 
vorzukauen.

> Ich bin Prof. und weiß von was ich rede Kinder.

Bei mir zeichnet sich eine Person durch ihre Taten und nicht durch ihren 
Titel aus. Ich hab einige Prof. im Bekanntenkreis und kann nur sagen: 
Das sind auch nur Menschen mit allen Vor- und Nachteilen.


Soviel von meiner Seite.

Gruß,
  SIGINT

P.S.: @Eric:

Der Pseudocode, der in deinem Beispiel steht scheint doch für die AVRs 
auch schon ganz brauchbar zu sein. Wenn du dich wirklich mit C etwas 
auskennst, dann solltest du den doch umsetzen können. Ein C-Programm, 
das auf vielen verschiedenen Hardware-Architekturen läuft ist relativ 
kompliziert. Für den Linux-Kernel z.B. gibt es ja automake und Konsorten 
(damit kenn ich mich aber leider nicht aus). Die Platformunabhängigkeit 
wird durch C-Dateien hergestellt, die die Rechnerarchitekur gegenüber 
den Linux-Kernel verbergen. Theoretisch geht sowas auch bei 
Mikrocontrollern... dabei geht aber etwas Rechenleistung und vor allen 
Funktionalität verloren.
Wenn ich dir aber einen guten Tipp geben darf: Lern Englisch. Viele gute 
Seiten und praktisch alle Datenblätter sind in Englisch verfasst. So 
kompliziert ist das eigentlich nicht... ein Wörterbuch sollte man aber 
immer griffbereit haben. Z.B.: http://dict.leo.org/

von Falk B. (falk)


Lesenswert?

@ Joe

>Ansonsten produzierst du nen Haufen unfähiger Ing. Das scheint
>allerdings bereits etablierter Lehralltag zu sein (ich nenne es Murx).

Marx ist die Theorie, Murks die Praxis.

;-)
Falk

von jack (Gast)


Lesenswert?

@Sigint
>Als Prof. sollten gerade Sie wissen, daß Bücher eine der wichtigsten
>Informationsquellen waren und sind.

Glaub nur nicht alles, was einer so als Titel angibt. Sein Schreibstil
hört sich eher nach abgebrochener Hauptschule an.
"Prof. Dr." würde ein wirklicher Prof niemals schreiben, also nur ein
ganz gewöhnlicher Troll.

von Eric S. (eazy)


Lesenswert?

Sigint 112 wrote:
> P.S.: @Eric:
>
> Der Pseudocode, der in deinem Beispiel steht scheint doch für die AVRs
> auch schon ganz brauchbar zu sein. Wenn du dich wirklich mit C etwas
> auskennst, dann solltest du den doch umsetzen können. Ein C-Programm,
> das auf vielen verschiedenen Hardware-Architekturen läuft ist relativ
> kompliziert. Für den Linux-Kernel z.B. gibt es ja automake und Konsorten
> (damit kenn ich mich aber leider nicht aus). Die Platformunabhängigkeit
> wird durch C-Dateien hergestellt, die die Rechnerarchitekur gegenüber
> den Linux-Kernel verbergen. Theoretisch geht sowas auch bei
> Mikrocontrollern... dabei geht aber etwas Rechenleistung und vor allen
> Funktionalität verloren.
> Wenn ich dir aber einen guten Tipp geben darf: Lern Englisch. Viele gute
> Seiten und praktisch alle Datenblätter sind in Englisch verfasst. So
> kompliziert ist das eigentlich nicht... ein Wörterbuch sollte man aber
> immer griffbereit haben. Z.B.: http://dict.leo.org/


Wie gessagt, bin kein Experte und in C. Ich kann nur die Grundlagen. 
Vertieft habe ich das noch nie, weil ich nie die Zeit dazu hatte. Das 
Studium nimmt schon genug Zeit in Anspruch. Nebenher mache ich gerne 
Dinge mit Mikrocontroller. Aber ich habe halt null Erfahrung mit Atmel 
Controller, geschweige denn AVR Studio, Atmega16 usw.
Ich weiß einfach nicht wie ich dieses Problem umsetzen soll!
Die über 100 Seiten des AVR-GCC-Tutorial kann ich aus Zeitgründen nicht 
"konsumieren". So jetzt fangen auch gleich wieder Joe und Peter an zu 
schimpfen (nach dem Motto: Lesen oder bleiben lassen). Dazu sage ich nur 
Danke, das hätte ich auch ohne eure Hilfe hinbekommen. Sorry Jungs, 
nimmt das nicht persönlich. Ich habe halt gedacht, da gibt es hier 
bestimmt jemand, der mir zeigen kann wie ich dieses eigentlich einfache 
Bsp. lösen kann, wenn nicht alles dann wenigstens ein paar Ansätze. Aber 
das war wohl nichts auf die Schnelle. Danke Jungs, das Ding muss ich 
leider aufgeben (Grund: Zeitmangel). Starter Kit von Atmel und Zubehör 
über 100 Euro umsonst gekauft. F**k!
@Peter: Sorry aber mit deinem Programm "Timebase" kann ich überhaupt 
nichts anfangen. Ich verstehe so gut wie gar nichts und kann auch keinen 
Zusammenhang zu meinem Programm erkennen.
Danke für keine produktive Lösung!

Grüße Eric


P.S.: Irgendwie gebe ich Dr. Tee ein wenig recht. Für was gibt es 
überhaupt Foren?

von Geniesser (Gast)


Lesenswert?

@Eric Schmitz
So schnell die Flinte ins Korn werfen, bloß wegen ein wenig Kritik?

Wo bleibt die Ausdauer, der Mut und die Lernbereitschaft?!

Zeitmangel ist verständlich, aber mal ehrlich, was sind denn schon 100 
Seiten Lehrstoff, um das komplexe Feld der Mikrocontroller 
kennenzulernen?!

Fehlendes Englisch und Mikrocontroller beißt sich leider. Aber holprig 
gelesen ist besser als 'Bogen drum machen' (nobody is perfect :)) etwas 
Schulenglisch hat doch jeder und mit der Zeit gewöhnt man sich dran.

Wenn dir so vieles im Verständnis mit MC fehlt (wer kennt den Zustand 
nicht? ;)), dann verstehe ich nicht, wie man sich gleich mit so einem 
Detailkram beschäftigt wie Stack, Umsetzung auf anderen Plattformen usw. 
(zäumst du das Pferd etwa von hinten auf?)

Etwas Grundlagen in dt. gefällig? Wie wäre es damit:
http://www.rowalt.de/mc/avr/avrbuch/index.htm

(Nein, ich bin nicht der Autor; Nein, ich habe nix von dieser 
Empfehlung; hab selbst gerade etwas herum recherchiert; BASIC ist zwar 
nicht mein Fall, der Aufbau des Buches macht aber keinen schlechten 
Eindruck)

Suche dir einfache Beispiele, die erprobt sind und funktionieren und 
lerne Anhand des GENAUEN Studiums dieser Beispiele die Materie kennen. 
Das schafft Sicherheit und gibt Raum für eigene (erfolgreiche) 
Experimente.

von Peter D. (peda)


Lesenswert?

Eric Schmitz wrote:

> Die über 100 Seiten des AVR-GCC-Tutorial kann ich aus Zeitgründen nicht
> "konsumieren".


Da bin ich etwas irritiert, wieviel Minuten hattest Du denn für das 
Lernen eingeplant ?

Oben hast Du doch großspurig behauptet, dan 8051 hättest Du gut drauf, 
dann sollte der AVR ja kein Problem sein. Ich vermute mal, das mit dem 
8051 war ne glatte Lüge.

Die Timer des AVR sind zwar etwas komplexer, aber man muß ja nicht alle 
Funktionen benutzen.
Einfach laufen lassen (Vorteilerregister einstellen) und 
Overflow-Interrupt geht auch, wenn auch nicht super genau.

Es heißt übrigens AVR und nicht Atmel. 8051 und ARM produziert Atmel 
auch.


Peter

von jack (Gast)


Lesenswert?

> Danke Jungs, das Ding muss ich
>leider aufgeben (Grund: Zeitmangel). Starter Kit von Atmel und Zubehör
>über 100 Euro umsonst gekauft.

Also das ist einfach lächerlich. Du kaufst Dir einfach so ein Starter 
Kit
und hast dann keine Zeit Dich damit zu beschäftigen.
Was denkst Du denn, wieviel Zeit manche Leute hier im Forum für die
Einarbeitung in einen bestimmten Controller aufgewendet haben. Und Du
meinst, Du kannst mal so eben mit einem neuen µ rumspielen.
Die Datenblätter durchzulesen, hast Du auch keine Zeit, das sollen am
besten andere für Dich erledigen.
Macht alles einen äußerst schwachsinnigen Eindruck.

von Elektrikser (Gast)


Lesenswert?

Ich hatte den Wechsel von '51 auf AVR und fand, dass es einfach zu 
machen war. O.K. man muss sich an die Assembler-Befehle gewöhnen, aber 
dafür gibt es ja das Datenblatt und dieses Forum. Ich verstehe deswegen 
die Beweggründe des TO nicht, damit aufzuhören. Wenn er den '51er kann, 
ist der Umstieg nicht schwierig.
Die 100 Seiten des Tutorials überfliegt man einmal, damit man weiß, was 
drin steht. Danach sucht man sich die Stellen raus, die man momentan 
benötigt. Du musst nicht alles auswendig lernen, du sollst nur wissen, 
wo du suchen musst, wenn du nicht mehr weiter weisst.

Gruß Elektrikser

von tt (Gast)


Lesenswert?

@ Eric

falls du mal dein Studium fertig hast,...

sagst du deinem Arbeitgeber dann auch, dass du keine englischen 
Datenblätter lesen kannst? Ist doch wohl nur nen Witz oder...

von Eric S. (eazy)


Angehängte Dateien:

Lesenswert?

Also Leute,
dank eurer ausreichenden Kritik habe ich das Progromm hinbekommen!
(siehe Anhang). Gibt es hier noch Verbesserungen die ich durchführen
könnte?

Mir ist aber immer noch nicht klar, wie ich es dabei so erstelle, dass
man es auch leicht an andere Rechner anpassen kann. Schaut mal, ich
benutze Atmega16. Will ich jetzt z.B. ein Atmega32, so muss ich mit
#define das durchführen.
Bsp: Wenn ich jetzt im Quellcode schreibe:
#define mega16;
// dann soll er mir die entspr. Befehle ausführen um das Blinklicht zu
realisieren. Bei:
#define mega32;
// soll er mir dann alles für Atmega32 ausführen usw. Das einmal für ein
paar uProzessoren. Der Quellcode nimmt somit ein paar Zeilen am Umfang
zu.

Das muss doch irgendwie mit einer If-Bedingung realisiert werden können,
oder? Aber leider bin ich hier überfragt. Weiß jemand wie man hier
genauer vorgeht bzw. wie man das machen kann?


P.S.: Ich freue mich schon wieder auf eure Kritik ;-)!

von Peter D. (peda)


Lesenswert?

Eric Schmitz wrote:

> Bsp: Wenn ich jetzt im Quellcode schreibe:
> #define mega16;
> // dann soll er mir die entspr. Befehle ausführen um das Blinklicht zu
> realisieren. Bei:
> #define mega32;
> // soll er mir dann alles für Atmega32 ausführen usw. Das einmal für ein
> paar uProzessoren. Der Quellcode nimmt somit ein paar Zeilen am Umfang
> zu.

Ja, das geht mit #ifdef und #endif

Aber schau doch erstmal, wie groß die Unterschiede von Mega16 zu Mega32 
in Deinem Programm sind.


Peter

von Peter D. (peda)


Lesenswert?

1
...
2
TCNT1L  = 0xAF;               // Timer1 laden (50 ms einstellen)
3
TCNT1H  = 0x3C;

Jau, da biste schon voll inne Hundekacke getreten

Atmel says:

"To do a 16-bit write, the high byte must be written before the low 
byte."

Oder einfach so, dann isses auch lesbar:
1
...
2
  TCNT1 = (unsigned int)-50001;


Peter


P.S.:
Die -50001 stimmen natürlich nicht, sind aber genau das, was Du 
hingeschrieben hast (0x3CAF = -50001).

von Eric S. (eazy)


Lesenswert?

Peter Dannegger wrote:
> P.S.:
> Die -50001 stimmen natürlich nicht, sind aber genau das, was Du
> hingeschrieben hast (0x3CAF = -50001).


Was soll daran nicht richtig sein? Ich verstehe nicht ganz. In dem 
Programm V31C ging das ja auch alle 0,5s. Geht das hier nicht? Ist das 
mit dem Quarz hier anders. Welche Werte sind denn sonst TCNT1L und 
TCNT1H um 0,5s zu realisieren?

von Eric S. (eazy)


Lesenswert?

Peter Dannegger wrote:
> Ja, das geht mit #ifdef und #endif
>
> Aber schau doch erstmal, wie groß die Unterschiede von Mega16 zu Mega32
> in Deinem Programm sind.
>
>
> Peter


Kannst du mir hier ein kleines Bsp. zeigen oder wo kann ich das irgendwo 
nachlesen?

von Andreas L. (andi84)


Lesenswert?

Mega16 und Mega32 sind sich sehr ähnlich, der 32er hat doppelt soviel 
Flash und RAM und (glaub ich) noch ein paar Sonderfunktionen mehr. Code 
für den Mega16 läuft daher in aller Regel ohne Änderungen auf dem 
Mega32.
Man muss nur neu compilieren, dann macht der Compiler den Rest.

von Eric S. (eazy)


Lesenswert?

Andreas Lang wrote:
> Mega16 und Mega32 sind sich sehr ähnlich, der 32er hat doppelt soviel
> Flash und RAM und (glaub ich) noch ein paar Sonderfunktionen mehr. Code
> für den Mega16 läuft daher in aller Regel ohne Änderungen auf dem
> Mega32.
> Man muss nur neu compilieren, dann macht der Compiler den Rest.

Das mit Mega32 war nur ein Bsp. Mich würde es interessiern, ohne viel 
Code das Programm auch universell zu betreiben auf MegaXYZ usw. Aber 
trotzdem danke!

von Andreas L. (andi84)


Lesenswert?

Die AVRs sind insgesamt alle sehr ähnlich. Die meisten 
Peripheriekomponenten sind bei allen AVRs gleich oder sehr ähnlich. Wenn 
man nicht gerade irgendeine Sonderfunktion (z.B. zweiter USART) 
verwendet, bleibt der Code eigentlich immer sehr ähnlich.

von Peter D. (peda)


Lesenswert?

Eric Schmitz wrote:

> Was soll daran nicht richtig sein? Ich verstehe nicht ganz.

50ms entspricht 20Hz

20Hz * 50001 = 1,00002MHz.

Wenn Du also nen 1,00002MHz Quarz nimmst, stimmts natürlich.


Peter

von Eric S. (eazy)


Lesenswert?

alles klar! jetzt hat es auch geklappt!!!

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.