Forum: Mikrocontroller und Digitale Elektronik PIC16F877 Flash als Speicher für Konstanten nutzen


von Christian (Gast)


Lesenswert?

Hallo zusammen,

ich habe die Aufgabe ein bestehendes Programm eines Atmega32 auf einen 
PIC16F877 umzuschreiben. Leider habe ich zur Zeit noch keine große 
Ahnung/Erfahrung bei der Programmierung von Mikrokontrollern.

Mein Problem ist, dass ich ein Display ansteuern muss und hierfür 
vordefinierte Grafiken im Hex Format vorliegen habe. Die einzelnen 
Zahlen ,Buchstaben und Symbole wurden aus einzelnen Bitmaps in Hex 
Format umgewandelt und in Arrays abgelegt. Wenn ich die ganzen Daten nun 
als konstante Arrays (für jedes Symbol ein Array) anlegen will ist mein 
Speicher ziemlich schnell voll.

Wenn ich das richtig verstanden habe wurden diese Daten bei dem Atmega32 
mit dem Schlüsselwort "PROGMEM" im Flash Speicher abgelegt.

z.B.
1
//arrow down picture 40x20
2
const PROGMEM unsigned char arrow_down[] = {
3
0x1F,0xFF,0xFF,0xFF,0xF8,0x20,0x00,0x00,0x00,0x04,0x40,0x00,0x00,0x00,0x02,0x47,
4
0xFF,0xFF,0xFF,0xE2,0x43,0xFF,0xFF,0xFF,0xC2,0x41,0xFF,0xFF,0xFF,0x82,0x40,0xFF,
5
0xFF,0xFF,0x02,0x40,0x7F,0xFF,0xFE,0x02,0x40,0x3F,0xFF,0xFC,0x02,0x40,0x1F,0xFF,
6
0xF8,0x02,0x40,0x0F,0xFF,0xF0,0x02,0x40,0x07,0xFF,0xE0,0x02,0x40,0x03,0xFF,0xC0,
7
0x02,0x40,0x01,0xFF,0x80,0x02,0x40,0x00,0xFF,0x00,0x02,0x40,0x00,0x7E,0x00,0x02,
8
0x40,0x00,0x3C,0x00,0x02,0x40,0x00,0x18,0x00,0x02,0x20,0x00,0x00,0x00,0x04,0x1F,
9
0xFF,0xFF,0xFF,0xF8
10
};

Ich suche seit gestern nach einer Möglichkeit das mit dem PIC16F877 auch 
so in der Art zu machen, konnte aber leider noch nichts finden.
Ich hoffe einer von euch kann mir einen Tipp geben wie ich das Problem 
lösen kann.

Ich verwende MPLAB IDE v8.10 von Microchip und den picc lite Kompiler 
von Hi-tech (Vorgabe vom Betrieb).

Danke schon mal im Vorhinein.

Gruß
Christian

von Frank (Gast)


Lesenswert?

Ich glaube das Schlüsselwert war ROM anstelle von PROGMEM, aber diese 
Info basiert nur auf "ganz dunklen" Erinnerungen ;-)

von Christian (Gast)


Lesenswert?

Danke, aber das alleinige Austauschen des Schlüsselwortes war es leider 
nicht.
Zumindes meckert der Kompiler darüber...

von Peter D. (peda)


Lesenswert?

Christian wrote:
> ich habe die Aufgabe ein bestehendes Programm eines Atmega32 auf einen
> PIC16F877 umzuschreiben.

Das geht aber nur, wenn in dem ATmega32 noch massig Ressourcen frei 
sind:

ATmega32: 16k*16 Flash, 2k SRAM
PIC16F877: 8k*14 Flash, 368 Byte SRAM

Der PIC dürfte aber eher mehr brauchen durch das ständige Page 
Umschalten.


>
1
> //arrow down picture 40x20
2
> const PROGMEM unsigned char arrow_down[] = {
3
>

Das klingt sehr danach, das der Flash schon gut voll ist.

Bei 14 Bit im PIC-Flash kriegt man auch nur ein Byte pro Word 
gespeichert oder man muß umständlich Bitschiften.

Das wird also ein ziemliches Gemäre werden (keine Interruptvektoren 
usw.).
Wer denkt sich denn bloß sowas aus.
Viel leichter gehts umgekehrt (PIC -> AVR).


Peter

von Peter D. (peda)


Lesenswert?

Christian wrote:
> Danke, aber das alleinige Austauschen des Schlüsselwortes war es leider
> nicht.
> Zumindes meckert der Kompiler darüber...

Was sagt denn das Map-File, wie voll der ATmega32 überhaupt ist?
Vorher brauchst Du garnicht erst anfangen.
Du mußt ja erstmal wissen, ob Du überhaupt eine kleine Chance hast.


Peter

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.