www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik komische uart ausgabe bei atmega32


Autor: Tom Eichw (hallo02)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich definiere folgende arrays mit 256 werten:

typedef struct PWM_ {
  unsigned char r[256];
  unsigned char g[256];
  unsigned char b[256];
} PWM;

PWM pwm_conf[2] = {
       {  { 255,254,253,252,251,250,249,248,247,...,0 },
          { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 },
          { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0}
       },

       { { 255,254,253,252,251,250,249,248,247,....0 },
         { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 },
         { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0}
       }
};

Wenn ich nun im main program per UART (baud 9600, datenbits 8, paritaet 
keine, stoppbits 1) zB pwm_conf[1].r[2] ausgebe, bekomme ich 
richtigerweise 253 zurueckgeliefert.


Wenn ich nun aber zu pwm_conf weitere 2 arrays hinzufuege, kommt auf der 
uart nur mehr schrott raus - zB ü2ü2ü2ü2ü2ü2

array schaut zB so aus:

PWM pwm_conf[4] = {
       {  { 255,254,253,252,251,250,249,248,247,...,0 },
          { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 },
          { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0}
       },

       { { 255,254,253,252,251,250,249,248,247,....0 },
         { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 },
         { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0}
       },
       { { 255,254,253,252,251,250,249,248,247,....0 },
         { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 },
         { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0}
       },
       { { 255,254,253,252,251,250,249,248,247,....0 },
         { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,...,255 },
         { 0,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57...0}
       }
};


Kann mir vielleicht jemand weiterhelfen, warum dies so ist?
Vielen Dank,
Thomas

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
typedef struct PWM_ {
  unsigned char r[256];
  unsigned char g[256];
  unsigned char b[256];
} PWM;

PWM pwm_conf[4] = {

768 x 4 ist nun mal mehr als 2kB RAM.

Autor: Tom Eichw (hallo02)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhh, das leuchtet ein -danke fuer die schnelle Antwort!

Ich werde wahrs. sonst keine möglichkeit haben die Werte am uC zu 
speichern?
EEPROM ist auch zu klein.
Jetzt habe ich nur noch die moeglichkeit einen anderen uC zu nehmen bzw 
die Daten extern einzulesen (zB Flash datenspeicher).
Oder gibt es noch was anderes?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom Eichw schrieb:

> Oder gibt es noch was anderes?

Was ist mit dem internen Fash? Oder sollte das etwa durch den 
Programm-Code schon voll sein?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was ist mit dem internen Fash? Oder sollte das etwa durch den
> Programm-Code schon voll sein?

Das enthält jetzt schon die ganze Initialisierung (die Daten müssen ja 
irgendwie ins Ram kommen), kann also nicht voll sein.  Wenn man die 
Ram-Zugriffe aufs Flash verlegt, ändert sich an der Flashgröße fast 
nichts und das Ram wird frei.

Autor: Patrick De zordo (Firma: Pronet) (zordo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tom,
musst du die Werte eigendlich in einem Array ablegen ?

Wenn die Werte diese sind die du im Beispiel angegeben hast,
dann empfehle ich dir die Werte im Controller zu berechnen.

Grüße !

Autor: Tom Eichw (hallo02)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick De zordo schrieb:
> Hallo Tom,
> musst du die Werte eigendlich in einem Array ablegen ?
>
> Wenn die Werte diese sind die du im Beispiel angegeben hast,
> dann empfehle ich dir die Werte im Controller zu berechnen.
>
> Grüße !

Die Werte schauen anders aus, sind leider nicht 1,2,3..usw.
Die Werte werden mit Matlab berechnet um RGB leds anzusteuern. Die 
formel dazu kenne ich noch nicht, macht ein Freund. Aber vielleicht kann 
ich sie im uC nachbilden.

Autor: Tom Eichw (hallo02)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hazeh Zimmerer schrieb:
>> Was ist mit dem internen Fash? Oder sollte das etwa durch den
>> Programm-Code schon voll sein?
>
> Das enthält jetzt schon die ganze Initialisierung (die Daten müssen ja
> irgendwie ins Ram kommen), kann also nicht voll sein.

Der flashspeicher liegt nur bei ~6kb.

> Wenn man die
> Ram-Zugriffe aufs Flash verlegt, ändert sich an der Flashgröße fast
> nichts und das Ram wird frei.

wie macht man das?

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom Eichw schrieb:

>> Wenn man die
>> Ram-Zugriffe aufs Flash verlegt, ändert sich an der Flashgröße fast
>> nichts und das Ram wird frei.
>
> wie macht man das?

seufz 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Tom Eichw (hallo02)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Justus Skorps schrieb:

> *seufz*
> 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

:-)
Ich bin leider kein uC Experte, dafuer gibts ja dieses tolle Forum!
Auf jeden Fall, hab ich heute wieder was gelernt und vor allem 
funktioniert es jetzt!

mein aufruf lautet nun:  const PWM pwm_conf[4] PROGMEM = { ..}
die werte lese ich dann mit: pgm_read_byte()

vielen dank nocheinmal an justus!

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> die werte lese ich dann mit: pgm_read_byte()

So war's gedacht und Du hast Dich selbst dahin durchgebissen.  Du wirst 
auch festgestellt haben, dass sich der Flashverbrauch kaum geändert hat, 
denn die Arrays wurden vorher von dort ins Ram kopiert, verbrauchten 
also bereits denselben Platz.  Gratulation zum Lernerfolg (nicht 
ironisch, sondern ernst gemeint).

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.