Hallo,
wenn ich ein Programm auf einen anderen µC transferiere, kann ich davon
ausgehen, dass bei gleicher Hardware-Umgebung und gleichem Code alles
gleich läuft?
Problem: Ich habe das Programm auf einem Atmega8 geschrieben. Dieser ist
aber nun für das fertige Projekt "überdimensioniert" und ich würde es
gerne auf einen Attiny24 machen.
Wenn ich den Sourcecode anpasse, also die Registernamen unterscheiden
sich ja geringfügig, aber das Programm ansich sonst lasse, funktioniert
das ganze dann? Oder kann dies trotzdem Probleme hervorrufen?
Danke.
Gruß
Sven
>Wenn ich den Sourcecode anpasse, also die Registernamen unterscheiden>sich ja geringfügig, aber das Programm ansich sonst lasse, funktioniert>das ganze dann? Oder kann dies trotzdem Probleme hervorrufen?
Meine Güte, probier es aus. Dann wirst du schon sehen ob es geht.
Es kommt darauf an, wie die integrierten Hardware-Features genutzt
werden. Die Ausstattung der verschiedenen AVRs ist sehr unterschiedlich.
Ein einfaches Programm ohne Verwendung von Interrupts und anderer
Spezialitäten (z.B. Hardware-PWM) wird vermutlich laufen.
...
holger schrieb:
> Meine Güte, probier es aus. Dann wirst du schon sehen ob es geht.
Das habe ich. Und es treten Probleme auf, deshalb interessiert mich die
Frage.
Das Programm läuft mit ein paar Interrupts. Das Input Capture macht
Probleme. Vorher habe ich mit dem Noise Cancellor auf Atmega 8 saubere
Signale. Auf dem Atmega44 irgendwie nicht mehr.
Daher meine Besorgnis, ob beim transferieren was schief ging, obwohl ich
nun schon 2x mit den Datenblättern alles abgeglichen habe.
Inzwischen versuchen sie bei den neuen AVRs, die kompatibilität über die
Registernamen zu verbessern.
Allerdings gibts immer Pferdefüße beim Portieren auf andere uCs, wie die
Interrupteinsprungvektoren, unterschiedliche Anzahl der Peripherie...
Der Pullup ist extern und zusätzlich noch ein kleiner Kondensator gegen
GND um Rauschen auch noch etwas hardwareseitig zu unterdrücken. Das
funktionierte beim Atmega8 prima.
Ein paar Unterschiede gibt es beim Interrupt enable ist es z.B. TIMSK1
statt TIMSK, aber das habe ich alles beachtet.
Mir geht es prinzipiell darum, ob man so etwas transferieren kann ohne
Probleme oder ob ich tatsächlich irgendetwas im Code vergessen hätte zu
ändern/transformieren (was mir bis nach dem jetzigen 3. mal nicht
aufgefallen ist).
Hi
>Mir geht es prinzipiell darum, ob man so etwas transferieren kann ohne>Probleme oder ob ich tatsächlich irgendetwas im Code vergessen hätte zu>ändern/transformieren (was mir bis nach dem jetzigen 3. mal nicht>aufgefallen ist).
Z.B. besitzen ATTinys, im Gegensatz zu den ATMegas, keinen
Hardwaremultiplizierer.
MfG Spess
spess53 schrieb:
> Z.B. besitzen ATTinys, im Gegensatz zu den ATMegas, keinen> Hardwaremultiplizierer.>> MfG Spess
Was bedeutet das konkret?
In meinem Programm werden nur ein paar eingelesene ADC Werte in einen
Wert umgerechnet mit einer Multiplikation. Das sollte doch kein Problem
sein oder? Muss ich hierfür dann eine spezielle library aufrufen bzw.
includieren?
Konkret bedeute es, dass die Multipliktion bei Programmierung in C auf
Tinys etwas langsamer ist als auf Megas, sonst nichts. Das ist Sache des
Compilers, nicht deine.
Das Programm ist mit GCC geschrieben (Programmers Notepad) und sollte
daher wohl kein Problem sein.
Naja, ich werde morgen mal das Programm kürzen und die Peripherie
rausschmeisen und nur das ICP laufen lassen. Mal schauen, wie es sich
dann verhält...
Trotzdem Danke.
Hallo,
ich habe heute das Programm reduziert, sodass wirklich nur die Ports und
der Timer für das Input Capture initialisiert werden.
Ebenso nur der Interrupt für Input Captute, welches bei einer Flanke die
LED einschaltet, die Flanke wechselt, und wieder ausschaltet. Das
Hauptprogramm ist eine leere Schleife.
Das Programm ist also wirklich total abgespeckt, aber irgendwie bekomme
ich trotzdem rauschen, da die LED manchmal nicht an- oder abgeschaltet
wird.
Kann so etwas sein? Das gleiche Programm bei gleicher Hardware läuft auf
dem Atmega8 ohne Probleme....