Forum: Mikrocontroller und Digitale Elektronik SD - Karte compile Probleme


von J. K. (rooot)


Lesenswert?

Hallo,

will einen Logger mit SD-Karte bauen.

hab mir dazu den Code von Ulrich Radig heruntergeladen und compiliert.

Folgendes Problem:

Wenn ich in den Configurations zb einen Mega32 einstelle funktioniert 
alles.

Wenn ich Mega16 einstelle (der eigentlich gedacht war) kommen einige 
Fehlermeldungen:

../../SD/usart.c: In function 'usart_init':
../../SD/usart.c:32: error: 'UCR' undeclared (first use in this 
function)
../../SD/usart.c:32: error: (Each undeclared identifier is reported only 
once
../../SD/usart.c:32: error: for each function it appears in.)
../../SD/usart.c:39: error: 'UBRR' undeclared (first use in this 
function)
../../SD/usart.c: In function 'usart_write_char':
../../SD/usart.c:47: error: 'USR' undeclared (first use in this 
function)

ich hatte zwar die Befürchtung, das der Ram beim Mega16 zu klein wird, 
aber das wirkt sich ja noch nicht beim kompiliern aus oder?

Der Flash dürfte auch kein Problem sein:

Meldung:

AVR Memory Usage
----------------
Device: atmega32

Program:    4412 bytes (13.5% Full)
(.text + .data + .bootloader)

Data:         45 bytes (2.2% Full)
(.data + .bss + .noinit)

die Fehlermeldungen ergeben für mich keinen Sinn.

mfg
J.K.

Quellcode: http://www.ulrichradig.de/home/index.php/avr/mmc-sd

von Micha (Gast)


Lesenswert?

Der mega16 & mega32 unterscheiden sich halt an vielen Stellen, hier den 
Registern. Die Fehlermeldungen beziehen auf die (dem m16 fehlenden bzw. 
anders lautenden) Register der UART-Schnittstelle (Einstellung der 
Baudzahl etc.) Schaue mal in die Dokus zu beiden µCs. Es sogar eine 
Zusammenfassung der Unterschiede: -> 
http://www.atmel.com/dyn/resources/prod_documents/doc2538.pdf

Such Dir das M16 Datenblatt und passe den Code an den entsprechenden 
Stellen an

von J. K. (rooot)


Lesenswert?

Hab jetzt (brutal wie ich bin :-) den 32er Code auf den Chip geladen

bekomnm jetzt über die Schnittstelle aber eine Meldung!

"Karte nicht gefunden" (ist auch noch keine angeschlossen.

@MICHA:
Danke für die Antwort!

werd ich ausbessern und nochmal probieren!

von Simon K. (simon) Benutzerseite


Lesenswert?

J. K. wrote:
> Hab jetzt (brutal wie ich bin :-) den 32er Code auf den Chip geladen
Lass den Mist, sowas macht man nicht.

*Ändere es um, sodass es für Mega16 kompilierbar ist
*Besorge dir andere Sourcen
*Benutze einen Mega32

von Boxi B. (boxi)


Lesenswert?

tztztz

von J. K. (rooot)


Lesenswert?

Simon K. wrote:
> J. K. wrote:
>> Hab jetzt (brutal wie ich bin :-) den 32er Code auf den Chip geladen
> Lass den Mist, sowas macht man nicht.


Hatte ich nicht vor:

>werd ich ausbessern und nochmal probieren!

von Alain F. (fox82)


Lesenswert?

>> Hab jetzt (brutal wie ich bin :-) den 32er Code auf den Chip geladen

Lol!

Bin auch gerade an einem Logger dran, mit ATMega32. hast du den ATmega 
mit 3.3V versorgt?
Bei mir läuft der Code jetzt und dank der Hilfe hier im Forum auch die 
zweite SD-Karte :-)

Beitrag "SD Formatieren"

Gruss Alain

von J. K. (rooot)


Lesenswert?

Compilieren geht jetzt,

Grund war folgender:

Ulrich Radig hat die Files für mehrere µC Typen geschrieben.
->if difines (Präprozessoranweisungen)

  #if defined (_AVR_ATmega32_)
    #define USR UCSRA
    #define UCR UCSRB
    #define UBRR UBRRL
    #define EICR EICRB
    #define USART_RX USART_RXC_vect
  #endif

Es existiert nur eins fürn MEGA32 und keins fürn 16er!

also einfach kopieren, 32 in 16 ändern und schon gehts.

Das darf man auch. 16er und 32er unterscheidet nur der Speicher und ein 
paar Interrupt Sachen.

Pinbelegung und uart ist gleich, daher hat der 32er Code auch so gut 
funktioniert.



Beginne jetzt eine Dateischreib Libery zu verwenden 
(www.mikro-control.de)
(glaub aber jetzt schon das sich das Speichermäßig nicht ausgeht)

an Fox82:
ne hab 5V versorgung.
Spannungsumwandlung erfolgt (noch) über Spannungsteiler und Dioden.

von J. K. (rooot)


Lesenswert?

@www.mikro-control.de

Interresant:

In diesem Projekt sind eigene UART-Funktionen dabei

diese funktionieren aber irgendwie nicht richtig

Ich hab das Bsp Projekt heruntergeladen und kompiliert. 210% 
Programmspeicherauslastung!

Jetzt hab ich die uart Funktionen durch printf's ersezt und extra libery 
herausgelöscht:

speicherersparnis von ca 20 k !

hab jetzt nur mehr eine 60%ige auslastung!

mfg
J.K

von Simon K. (simon) Benutzerseite


Lesenswert?

J. K. wrote:
> Das darf man auch. 16er und 32er unterscheidet nur der Speicher und ein
> paar Interrupt Sachen.
>
> Pinbelegung und uart ist gleich, daher hat der 32er Code auch so gut
> funktioniert.

Jau, aber einige Register haben andere Bitdefinitionen. Laut Register 
Summary vom Mega16/32

von J. K. (rooot)


Lesenswert?

Ok, SRAM ist jetzt zu wenig

MEGA32 muss her^^

Reichelt:
http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=A363;GROUPID=2959;ARTICLE=45026;START=0;SORT=artnr;OFFSET=16;SID=31SoNsr6wQAR8AAE5kr3Uf99c79dd8bb35dcc037a8602701397c6

war da reichelt lustig oder warum ist da ein "Fenster" im IC? Der hat 
doch kein EPROM?

Ich tipp mal auf falsches Bild oder?

mfg
J.K

von Alain F. (fox82)


Lesenswert?

>Ich tipp mal auf falsches Bild oder?

Genau! Denke ich auch. Wenn diese aber ein Fenster hat, werde ich den
bestellen und an mein Schlüsselbund hängen.... :-)

Mit dem Mega32 kann ich jetzt die Karte lesen. Respektive den Text in
der mmc.txt Datei:

System Ready!
Karte gefunden!!

MBR Signatur found!

VBR Signatur found!
0 26 0 32 5f 59 83 c8 be fb cf ff 92 40 40 d7
Directory

Directory Ende

File Found!!
Hallo, ich bin der Text in der mmc.txt

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.