Avr assembler

Liebe/-r Experte/-in,

Hallo miteinander.

Ich bin absoluter anfänger und werde warscheinlich auch bleiben.
Nur sehr sporadisch bin ich gezwungen Mc. zu programieren, genaugenommen jetzt zweites mahl.
Ich habe ein kurzes programm wo ich beim auschalten oder stromausfall zwei var. ins eeprom ablegen muss sonst nichts.
Bascom aber verlangt im interrupt return. Ansonsten erlaubt überall dierekten sprung (ja, ja, ich weiss:smile:
Könnt ihr mich mit einem asm code aushelfen.

Guß

Balázs

Hallo Balazs,

dein Problem verstehe ich nicht ganz!? Möchtest du noch eine Variable bei Spannungsverlust ins EEprom sicher? Das geht doch nicht! Oder überwacht der MC, der an einer konstanten Versorgung hängt, eine anndere Steuerspannung???

Hast du vielleicht ein Schaltungsentwurf?
Gruß Daniel

Hallo Daniel

Erstmal danke schön für die blitzschnelle Antwort.

Also wie gesagt ich der"blutiger Laie"
vergass zu sagen das der Mc seine Spannungsversorgung überwacht beim Gefahr einen interrupt auslösst und von einem Stützkondensator unterstüzt, begrenzt in der Lage ist noch kurz paar Sachen zu erledigen.
Diverse Verbraucher Abzuschalten und zwei variable ins eeprom zu schreiben.

Nun es geht in Bascom auch gut aber nur mit ISR was ich unsinnig fand. In solcher Situation wo keine Register zu sichern sind nur das Eeprom zu schreiben ist wichtig weil sowiso ein Neustart folgt müsste goto reichen und wesentlich schneller somit sicherer sein als noch all die Register für nichts sichern dabei riskieren, dass dann der Saft womöglich nicht reicht.

Ich hoffe mir ist jetzt gelungen das Problem klarer zu vormulieren.

Gruß

Balázs

Hallo Balazs,

wie möchtest du den Verlust der Spannung erkennen???
Leider kenne ich mich mit der Bascom-IDE nicht aus, aber wenn es um reinen Asembler geht kann ich dir helfen. Aber ich würde das auch mit einer Interruptroutine erledigen.

Gruß Daniel

Hallo Daniel

wie möchtest du den Verlust der Spannung erkennen???

Natürlich wird eines von den HW interrupts dazu nötig.
Nur solten dabei keine überflüssige Arbeiten auch miterledigt werden.

Leider kenne ich mich mit der Bascom-IDE nicht aus,

Mann kann im Bascom asm code einbinden das währe dann kein problem.

aber wenn
es um reinen Asembler geht kann ich dir helfen. Aber ich würde
das auch mit einer Interruptroutine erledigen.

Schon klar aber nur das zu machen währendessen was wirklich nötig ist. Und das ist in diesem Fall nur zwei var ins Eeprom zu schreiben und ende.
Geht das?

Gruß
Balázs

Hallo Balász,

hier ein Beispiel vom ATmega16(das copierte ich aus dem Datenblatt):
EEPROM_write:
; Wait for completion of previous write
sbic EECR,EEWE
rjmp EEPROM_write
; Set up address (r18:r17) in address register
out EEARH, r18
out EEARL, r17
; Write data (r16) to data register
out EEDR,r16
; Write logical one to EEMWE
sbi EECR,EEMWE
; Start eeprom write by setting EEWE
sbi EECR,EEWE´
ret

du musst nur vorher entsprechend die Speicher Adresse in r17 und r18 sowie die zu speichernden Daten in r16 ablegen.
Beispiel:
Variable „Data“ wären deine Daten und du möchtest diese an Adresse 0x1234 im Eprom speichern.

ldi r16, Data
ldi r17, 0x34
ldi r18, 0x12
EEPROM_write:
sbic EECR,EEWE
rjmp EEPROM_write
out EEARH, r18
out EEARL, r17
out EEDR,r16
sbi EECR,EEMWE
sbi EECR,EEWE´
ret

Benötigte Ausführungszeit: 9 Takte * 1/Frequenz(Hz)

Gruß Daniel

Hallo Daniel.

Super. Werde probieren. Und villeicht mich auch mit asm auseinandersetzen wenn gott mir noch die zeit gibt.

Dankend:

Balázs