Moin zusammen,
ich habe ein Programm für den Arduino micro geschrieben aber jetzt ist
mir aufgefallen, dass der Micro einfach zu wenig Speicherplatz hat.
Deshalb wollte ich jetzt auf den Mega umsteigen. Irgendwie scheint aber
ein einfaches auswählen des Mega Boards nicht zu reichen. Muss ich die
Timer noch anpassen oder liegt es an was anderem?
Wirf einen Blick in die Datenblätter der µCs und vergleiche die
Schaltpläne der Arduino-boards an. Dann portiere dein Programm.
Black D. schrieb:> dass der Micro einfach zu wenig Speicherplatz hat.
Was geht denn aus, Flash, Ram oder EEprom?
Möglicherweise genügt es dein Programm zu optimieren und/oder auf den
Arduino-Overhead zu verzichten, wie du das bereits in großen Teilen des
geposteten Codes tust.
WePe schrieb:> Sind die Timer und Register bei beiden Controllern wirklich identisch?
Werde ich mal kontrollieren danke.
A. F. schrieb:> Was geht denn aus, Flash, Ram oder EEprom?>> Möglicherweise genügt es dein Programm zu optimieren und/oder auf den> Arduino-Overhead zu verzichten, wie du das bereits in großen Teilen des> geposteten Codes tust.
Ich brauche Platz für ein array für 9600 Einträgen um daraus eine
Sinuskurve zu generieren. Klar das geht natürlich auch mit viel weniger
eintragen. Ich vergleiche diese aber mit einem Dreiecksignal um darauf
eine Sinusförmige PWM zu erzeugen.
Ich habe sonst auch noch einen stm32 f767zi hier aber da weiß ich noch
nicht wie man den richtig programmiert.
Black D. schrieb:> Ich brauche Platz für ein array für 9600 Einträgen um daraus eine> Sinuskurve zu generieren.
Gibt es auch die Möglichkeit einen Speicherchip als "externer
Datenspeicher" anzubinden. Aber ein Mega ist von der Größe her mal
abgesehen, sicher die einfachere Lösung.
Vielleicht solltest du auch schauen ob der "Board-Treiber" auf den
neusten Stand ist.
Und ob die richtige Revision ausgesucht wurde.
Bei den Nano gibt es 2 Bootloader. Meine Nanos wollen immer den alten.
Sonst macht der Arduino-Compiler Stress.
Und nicht vergessen. Der Mega hat ein ganz anderes Pin-Layout. Einfach
gesagt, beim Nano ist i2c Pin 4+5. beim Mega i.d.R. 20 + 21.
Nachtrag: Bei China-Teilen ist es oft ratsam, die Baudrate
herunterzusetzen.
Und schau dir mal die Fehlermeldungen des Compiler an. Notfalls hier
posten.
Black D. schrieb:> Ich brauche Platz für ein array für 9600 Einträgen um daraus eine> Sinuskurve zu generieren.
Sind die 9600 Stützstellen ein ganzer Sinus oder nur ein Viertel davon?
Du brauchst nämlich nur ein Viertel Sinus, die anderen 3/4 kann man
einfach berechnen.
Black D. schrieb:> Ich brauche Platz für ein array für 9600 Einträgen
Du weist aber das Du nur ein Viertel der Sinuskurve ablegen musst, um
durch Zählrichtung und Vorzeichen einen kompletten Sinus herzustellen?
Raufzählen bis Ende Array, dann runterzählen bis erste Position Array,
Vorzeichen negieren, und das gleiche nochmal, dann bist Du wieder am
Anfang.
Mit einer viertel Tabelle, wo das Vorzeichen nicht im Array gespeichert
werden muss. Also 9bit Auflösung mit einem Byte Speicherplatz.
Edit:
Helmut war schneller
Tja. Das ist kein Arduino Programm, denn du greifst direkt auf die
Hardware-Register zu. Offensichtlich stimmen die bei den beiden
Arduino-Boards (respektive den darauf befindlichen µC) nicht überein.
Black D. schrieb:> Ich brauche Platz für ein array für 9600 Einträgen um daraus eine> Sinuskurve zu generieren.
Warum so viele? Wenn dein Sinus mit 8 Bit Amplitudenauflösung erzeugt
wird, reichen auch 256 oder 512 Stützstellen. Und wenn es nur der
Sinus sein soll, kann man die Tabelle auch in den Flash legen und muß
kein knappes RAM dafür ver(sch)wenden.
Das hat Jesper Hansen bei seinem Jesper-DDS (aka poor mans DDS) schon
vor über 20 Jahren so gemacht. War ein AT90S2313. Die Seite gibts schon
nicht mehr. Aber Mirrors findet man noch.
http://www.radanpro.com/Radan2400/mikrokontroleri/Jesper%27s%20AVR%20pages%20-%20MiniDDS.htm
Axel S. schrieb:> kann man die Tabelle auch in den Flash legen und muß> kein knappes RAM dafür ver(sch)wenden.
Ich würde für ein paar Euro ein SD-Karten-Reader einbauen.
Da habe ich DATEN-Speicher ohne Ende.
Die Daten in eine "Seq-Datenbank" mit Festen Stellen anlegen, und dann
einfach die passenden Daten dort holen.
Black D. schrieb:> Ich brauche Platz für ein array für 9600 Einträgen um daraus eine> Sinuskurve zu generieren.
Wenn du für eine brauchbare Sinuskurve alle 0.01° eine Stützstelle
brauchst, solltest du mal über deinen Algorithmus nachdenken.