Hallo, ich habe die Sufu des Forums benutzt aber nichts gefunden was mein Problem betrifft. Ich habe ein Testprogramm in AVR Studio 4 geschrieben für einen digitalen Funktionsgenerator und benutze einen Atmega32. Die 4 verschiedenen Wellenformen habe ich in den internen EEPROM des Atmega gebrannt und alle Werte benötigen den gesamten Speicher, also 1024 Byte. Nun habe ich aber ein Problem mit der Adressierung des EEPROM, ich komme höchstens auf die Adresse 01 1111 1111 (512 Byte). Hier die Wellenformen mit highbyte-Adresse: Sinus: 00 Rechteck: 01 Dreieck: 10 Sägezahn: 11 Wie gesagt, ich kann maximal die Rechteckspannung einstellen. Als Device habe ich auch Atmega32 angegeben. Vorher hatte ich Atmega16 angegeben da ich mich mit der Speichergrösse verrechnet hatte, hab aber ein neues Projekt angelegt und copy-paste in das Neue, aber das dürfte doch kein Problem sein oder? Wenn ich das Programm simuliere läuft auch alles gut bis auf das Adressproblem. Bitte um eure Hilfe! mfg Max
Ah ja sorry, hier der code: ;*********************************************************************** ** ;* Titel: DDS-Funktionsgenerator - Testprogramm ;* Autor: Stephany Max ;* ;* Prozessor: ATmega32 ;* Quarzfrequenz: 16MHz ;* ;*********************************************************************** ** ; Vereinbarungsteil .INCLUDE "m32def.inc" ; AVR-Definitionsdatei einbinden .DEF temp = r16 ; Zwischenspeicher .DEF char = r17 ; Register für Ausgabewerte .DEF WL = r24 ; Doppelregister low-byte .DEF WH = r25 ; " high-byte ;Programm-Flash .CSEG ; was ab hier folgt kommt in den ; FlashSpeicher .ORG 0x0000 ; Beginn des Programmspeichers reset: RJMP init ; springe nach 'init' ;Stapel initialisieren (für Unterprogramme bzw. Interrupts) init: LDI temp, HIGH(RAMEND) ; RAMEND (SRAM) ist in der Definitions- ; datei festgelegt (nur High-Byte) OUT SPH, Temp ; Information in den Stackpointer laden LDI temp, LOW(RAMEND) ; jetzt Low-Byte OUT SPL, Temp ; ;Ports definieren LDI temp,0xFF ; Port C als Ausgang OUT DDRC,temp LDI temp,0x80 ; Bit 7 von Port D als Ausgang OUT DDRD,temp ;Hauptprogramm main: LDI YL,0x00 ; Alle Register mit 0 laden LDI YH,0x00 ; LDI ZL,0x00 ; LDI ZH,0x00 ; LDI WL,0xFF ; LDI WH,0xFF ; LDI XL,0xFF ; LDI XH,0x00 ; SBI PORTD,7 ; Tiefpass einschalten LDI temp,0x00 ; Sinus auswählen OUT EEARH,temp ; loop: ADD YL,WL ; 32-bit-Werte miteinander addieren ADC YH,WH ; ADC ZL,XL ; Ein Übertrag auf das nächste Reg. ADC ZH,XH ; muss erfolgen OUT EEARL,ZH ; EEPROM adressieren SBI EECR,EERE ; Read Enable aktivieren ; -> EEPROM ist bereit zum Auslesen IN char,EEDR ; Daten aus EEPROM auslesen OUT PORTC,char ; Wert ausgeben RJMP loop ; Rücksprung .EXIT
Hi Hast du im Programm irgenwo die maximale Speicheradresse für den ATMega16 begrenzt -> 'and rxy, $1F' oder so? MfG Spess
spess53 wrote: > Hi > > Hast du im Programm irgenwo die maximale Speicheradresse für den > ATMega16 begrenzt -> 'and rxy, $1F' oder so? > > MfG Spess Wo kann man das denn einstellen? mfg Max
Hi bei 16 Bit-Registern (EEARL/H) muss das High-Register vor dem Low-Register geschrieben werden. MfG Spess
spess53 wrote: > Hi > > bei 16 Bit-Registern (EEARL/H) muss das High-Register vor dem > Low-Register geschrieben werden. > > MfG Spess Ist auch alles in Ordnung, also EEARH schreibe ich vor EEARL wie im code zu sehen ist. mfg Max
spess53 wrote: > bei 16 Bit-Registern (EEARL/H) muss das High-Register vor dem > Low-Register geschrieben werden. Gilt aber nur für solche Register, die einen direkten Einfluss auf die Hardware haben oder die durch die Hardware beeinflusst werden können (Timer-Zähl- und Compare-Register, ADC-Datenregister...). Trifft hier nicht zu. Es muss lediglich zum Zeitpunkt des Read-Strobes eine gültige Adresse drinstehen. In welcher Reihenfolge die da reinkommt, ist Wurscht.
Re: Atmega32 EEPROM Adressierungsproblehttp://googleads.g.doubleclick.net/pagead/iclk?sa=l&ai=BXqkCm
@Max: Und was passiert, wenn Du anstelle von 0x00 eine 0x03 ins EEARH schreibst?
Re: Atmega32 EEPROM Adressierungsproblehttp://googleads.g.doubleclick.net/pagead/iclk?sa=l&ai=BXqkCm
Johannes M. wrote: > @Max: > Und was passiert, wenn Du anstelle von 0x00 eine 0x03 ins EEARH > schreibst? Danke, klappt jetzt! Hatte die Adresse binär angegeben anstatt in hex.
Re: Atmega32 EEPROM Adressierungsproblehttp://googleads.g.doubleclick.net/pagead/iclk?sa=l&ai=BXqkCm
Max Stephany wrote:
> Danke, klappt jetzt! Hatte die Adresse binär angegeben anstatt in hex.
Was? Du hast ne 0x11 da reingeschrieben?
Re: Atmega32 EEPROM Adressierungsproblehttp://googleads.g.doubleclick.net/pagead/iclk?sa=l&ai=BXqkCm
Johannes M. wrote: > Max Stephany wrote: >> Danke, klappt jetzt! Hatte die Adresse binär angegeben anstatt in hex. > Was? Du hast ne 0x11 da reingeschrieben? Genau, ich arbeite oft nur mit hex-Zahlen und manchmal auch binär da bin ich wohl durcheinander geraten, tut mir leid. mfg Max
Hi >Genau, ich arbeite oft nur mit hex-Zahlen und manchmal auch binär da bin >ich wohl durcheinander geraten, tut mir leid. AVR-Studio akzeptiert auch 'FF$'. Da kommt man nicht so schnell durcheinander. MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.