Assembler Programm von ATtiny13 auf ATtiny45 portieren

#7878171
Lesenswert?

Ich habe ein Assembler-Programm für einen ATtiny13 das auch super funktioniert. Das Programm bindet eine Datei "ringtones.inc" ein. Diese Datei enthält Klingeltöne im Nokia RTTTL Format, allerdings passen in der ATtiny13 nur 2 Klingeltöne rein. Ich habe deshalb versucht, das Programm auf den ATtiny45 zu portieren. Allerdings scheint es nicht damit getan zu sein, in Zeile 2 die Definition anzupassen. Kann mal jemand von euch drübergucken und mir sagen, was ich sonst noch ändern muss? Ich habe von Assembler keine Ahnung.

Ergänzung: Ich bekomme von Microchip Studio 3 Fehlermeldungen geliefert:

1
Severity  Code  Description  Project  File  Line
2
Error    Undefined symbol: EEAR  RTTTL  C:\Users\HaSch\Documents\Atmel Studio\7.0\RTTTL\RTTTL\main.asm  327
3
Error    Undefined symbol: EEAR  RTTTL  C:\Users\HaSch\Documents\Atmel Studio\7.0\RTTTL\RTTTL\main.asm  335
4
Error    Undefined symbol: TIMSK0  RTTTL  C:\Users\HaSch\Documents\Atmel Studio\7.0\RTTTL\RTTTL\main.asm  67

[Mod: code-Tags eingefügt]

Angehängte Dateien:
#7878179
Lesenswert?

Hallo,

die nachfolgend hinzu gefügte Fehlermeldung zeigt unbekannte Registernamen an.

Man nimmt sich also beide Datenblätter.pdf beider µCs her, schaut in die Registertabelle und prüft, ob der "neue" µC etwa ähnliche Registernamen hat und wenn ja, ändert man diese im Quelltext auf die neuen Namen ab.

Zusätzlich muß die Interrupttabelle angepaßt werden auf den "neuen" µC.

beispielsweise sieht diese beim At13 so aus:

If the program never enables an interrupt source, the Interrupt Vectors are not used, and regular program code can be placed at these locations. The most typical and general program setup for the Reset and Interrupt Vector Addresses in ATtiny13 is:

1
Address Labels Code Comments
2
0x0000 rjmp RESET ; Reset Handler
3
0x0001 rjmp EXT_INT0 ; IRQ0 Handler
4
0x0002 rjmp PCINT0 ; PCINT0 Handler
5
0x0003 rjmp TIM0_OVF ; Timer0 Overflow Handler
6
0x0004 rjmp EE_RDY ; EEPROM Ready Handler
7
0x0005 rjmp ANA_COMP ; Analog Comparator Handler
8
0x0006 rjmp TIM0_COMPA ; Timer0 CompareA Handler
9
0x0007 rjmp TIM0_COMPB ; Timer0 CompareB Handler
10
0x0008 rjmp WATCHDOG ; Watchdog Interrupt Handler
11
0x0009 rjmp ADC ; ADC Conversion Handler
12
;
13
0x000A RESET: ldi r16, low(RAMEND); Main program start
14
0x000B out SPL,r16 ; Set Stack Pointer to top of
15
RAM
16
0x000C sei ; Enable interrupts
17
0x000D <instr> xxx
18
... ... ... ...
19
Table 18. Reset and Interrupt Vectors
20
Vector
21
No.
22
Program
23
Address Source Interrupt Definition
24
1 0x0000 RESET External Pin, Power-on Reset, Brown-out Reset,
25
Watchdog Reset
26
2 0x0001 INT0 External Interrupt Request 0
27
3 0x0002 PCINT0 Pin Change Interrupt Request 0
28
4 0x0003 TIM0_OVF Timer/Counter Overflow
29
5 0x0004 EE_RDY EEPROM Ready
30
6 0x0005 ANA_COMP Analog Comparator
31
7 0x0006 TIM0_COMPA Timer/Counter Compare Match A
32
8 0x0007 TIM0_COMPB Timer/Counter Compare Match B
33
9 0x0008 WDT Watchdog Time-out
34
10 0x0009 ADC ADC Conversion Complete

Diese also ersetzen durch diejenige des "neuen" µCs. Ich bin allerdings seit Jahren aus diesen Theman raus und mir ist die Zeit zu knapp. Viel Erfolg.

mfg

[Mod: code-Tags eingefügt]

#7878203
Lesenswert?

H. H. schrieb:

Hans S. schrieb:

EEAR TIMSK0

Die heißen dann EEARL bzw TIMSK.

Danke, damit läuft das Build nun ohne Fehlermeldung durch. Allerdings funktioniert das Programm noch nicht. Es sieht so aus, als ob es nicht gestartet würde. In main.asm sind nun folgende Zeilen grün markiert:

1
.INCLUDE "TN45def.inc"
2
...
3
OUT TIMSK,R16
4
...
5
unter READROM:
6
OUT EEARL,R16
7
...
8
unter WRITEROM:
9
OUT EEARL,R16
10
...
11
rjmp start

Also die Zeilen, die ich geändert habe und die letzte (rjmp start).Was bedeutet die grüne Markierung? Muss ich die letzte Zeile mit der start Anweisung auch noch ändern?

[Mod: code-Tags eingefügt]

#7878295
Lesenswert?

Hans S. schrieb:

Allerdings funktioniert das Programm noch nicht.

Meine Idee: das Include file "ringtones.inc" einmal direkt ausformuliert eingeben. Die Reihenfolge, wie Programmschnipsel eingegeben werden müssen, ist auch wichtig. Und, steht das File auch auf derselben Directory, damit der Programmer das auch findet? Zum Beispiel klappt bei mir "lcdroutines.inc" nicht. Ich muss die LCD-Routinen ausformulieren, Befehl für Befehl. Dann gehts.

ciao gustav

#7878297
Lesenswert?

S. L. schrieb:

Ganz so einfach wird es nicht werden; z.B. ist die Frequenz des 'Calibrated Internal Oscillator' verschieden.

Nur aus allgemeinem Interesse: wie sieht dieses 'ringtones.inc' aus?

So:

1
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2
;OCTAVE TABLES
3
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
4

5
OCTAVE3:
6
.DB "P",3,85,40,5,"A",3,85,40,5,"a",3,80,118,5,"B",3,76,202,5,"C",3,72,34,6,"c",3,68,127,6,"D",3,64,226,6,"d",3,60,75,7,"E",3,57,186,7,"F",3,54,47,8,"f",3,51,172,8,"G",3,48,48,9,"g",3,45,188,9
7
OCTAVE4:
8
.DB "A",3,43,80,10,"a",3,40,237,10,"B",3,38,147,11,"C",3,36,68,12,"c",3,34,254,12,"D",3,32,196,13,"d",2,241,150,14,"E",2,228,116,15,"F",2,215,95,16,"f",2,203,88,17,"G",2,191,96,18,"g",2,181,120,19
9
OCTAVE5:
10
.DB "A",2,170,160,20,"a",2,161,218,21,"B",2,152,39,23,"C",2,143,135,24,"c",2,135,252,25,"D",2,128,136,27,"d",2,121,43,29,"E",2,114,231,30,"F",2,107,189,32,"f",2,101,176,34,"G",2,96,192,36,"g",2,90,239,38
11
OCTAVE6:
12
.DB "A",2,85,64,41,"a",2,80,180,43,"B",2,76,77,46,"C",2,72,14,49,"c",2,68,249,51,"D",2,64,16,55,"d",2,60,86,58,"E",2,57,206,61,"F",2,54,123,65,"f",2,51,96,69,"G",2,48,128,73,"g",2,45,223,77
13
OCTAVE7:
14
.DB "A",2,43,128,82,"a",2,40,104,87,"B",2,38,154,92,"C",2,36,28,98,"c",2,34,242,103,"D",2,32,32,110,"d",1,241,172,116,"E",1,228,156,123,"F",1,215,246,130,"f",1,203,191,138,"G",1,191,0,147,"g",1,181,189,155
15
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
16
;RINGTONES 'DURATION,OCTAVE,TEMPO,TEMPO,NOTE1,NOTE2,...,NOTEn,0
17
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
18
Popcorn:
19
.DB 4,5,160,0,195,62,225,61,195,62,199,61,228,61,199,61,67,195,62,225,61,195,62,199,61,228,61,199,61,67,195,62,196,62,228,62,195,126,228,62,195,126,228,62,196,62,225,125,196,62,225,125,196,62,195,62,225,61,199,61,225,61,195,30,0
20
Indiana:
21
.DB 4,5,250,0,69,208,61,198,61,199,61,208,61,195,6,208,61,208,125,68,208,61,197,61,198,5,80,208,61,71,208,61,193,61,194,61,208,61,198,6,80,65,208,61,194,61,195,14,196,14,197,14,69,208,61,198,61,199,61,208,61,195,6,80,196,30,208,61,197,62,198,6,198,14,71,208,61,199,61,197,30,197,62,208,61,196,30,208,61,199,61,197,30,197,62,208,61,196,30,208,61,199,61,198,30,198,62,208,61,197,30,208,61,196,62,195,14,0
22
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
23
;EEPROM SECTION
24
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
25
.ESEG
26
;ringtone,ringtones
27
.DB 1,2
28
.DW Popcorn<<1,Indiana<<1

[Mode: Code-Tages eingefügt]

#7878299
Lesenswert?

Die ringtones.inc wird mit einem Converter-utility erzeugt z.B. aus folgendem Textfile:

1
Popcorn:d=4,o=5,b=160:8c6,8a#,8c6,8g,8d#,8g,c,8c6,8a#,8c6,8g,8d#,8g,c,8c6,8d6,8d#6,16c6,8d#6,16c6,8d#6,8d6,16a#,8d6,16a#,8d6,8c6,8a#,8g,8a#,c6
2
Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6

Man muss dann nur noch die Oszillator-Frequenz angeben und dann hat man das .inc file.

[Mod: code-Tags eingefügt]

Beitrag #7878310 wurde von einem Moderator gelöscht.
#7878318
Lesenswert?

Karl B. schrieb:

Habe Prog kurz ins Studio 4 kopiert: C:\Users\admin\Documents\Tone_x.asm(279): error: Undefined symbol: OCTAVE6

Die Teile vom ringtone sind noch nicht drin. und epromsegment fehlt noch. Sonst keine Fehlermeldungen Und EEAR Durch EAARL ersetzt Danke Hinz!

ciao gustav

Fehlermeldungen hatte ich ja auch nicht und das mit der OCTAVE6 wird erledigt sein wenn die ringtone drin ist. Trotzdem funktioniert es nicht. Ich frage mich auch, ob EEARL wirklich richtig ist. Nach Datenblatt tiny13 gibt es das da nämlich auch.

#7878351
Lesenswert?

H. H. schrieb:

Hans S. schrieb:

LOW 0xE2 beim tiny45

Prozessor läuft mit 8MHz.

LOW 0x2A beim tiny13

Und der mit 1,2MHz.

Und man wird die Interrupts anpassen müssen.

Wie müssen denn die Interrupts angepasst werden? Die ringtones.inc kann ich mit der richtigen Oszillatorfrequenz im converter-utility erzeugen. Beim tiny45 habe ich testweise auch mal LOW 0x2A geflasht mit dem "Erfolg", dass ich nicht mehr auf ihn zugreifen konnte und ich ihn über HV Programmierung zurücksetzen musste.

#7878521
Lesenswert?

Ich denke, dass mein Problem damit erledigt ist, ich bin rundum zufrieden mit der Lösung. Ich möchte mich ganz herzlich bedanken für eure tatkräftige Hilfe. Ich bin begeistert von der geballten Kompetenz, die in diesem Forum versammelt ist und bin sicher, dass es ohne eure Unterstützung nicht gelungen wäre, mein Vorhaben umzusetzen.

Wie es nun bei mir weitergeht: Ich habe schon kleine PCBs bei JLCPCB geordert auf die zwei Taster und ein ATtiny45 im SOIC-Gehäuse mit der erforderlichen Beschaltung sowie ein kleiner Buzzer kommen. Das Ding ist so klein, dass man es sich sogar an einer Schnur um den Hals hängen kann, ein wearable sozusagen. Damit werde ich dann an Enkel, Nichten und Neffen verschenken, die dann damit ihre Eltern und LehrerInnen ärgern können.

Noch einmal vielen Dank und Grüße in die Runde Hans

Übrigens: Ich habe 33 Klingeltöne rein bekommen, vielleicht gehen aber noch ein paar mehr, mal sehen.

#7878582
Lesenswert?

S. L. schrieb:

1
> Die Masse könnt Ihr nur durch Masse zwingen,
2
> Ein jeder sucht sich endlich selbst was aus.
3
> Wer vieles bringt, wird manchem etwas bringen;
4
> Und jeder geht zufrieden aus dem Haus.
5
> Gebt Ihr ein Stück, so gebt es gleich in Stücken!
6
>

Wie dem auch sei - also erkannt habe ich gerade noch 'Popcorn', aber gehört habe ich es mit Grauen.

Aber „Indiana“ ist doch nicht schlecht.

#7878831
Lesenswert?

Hans S. schrieb:

Ich habe das Häkchen gefunden, das nötig war, um die .eep zu erzeugen. Jetzt habe ich beide Dateien auf den tiny45 geflasht und nun dudelt es munter drauflos!!!

Hi, vielen Dank für Mühe. Nur, leider habe ich jetzt nicht ganz aufgepasst, oder.. könntest Du nochmal das jetzt aktuelle ASM Programm mit dem zugehörigen Zusatzprogramm für das EEprom posten?

Bei mir sieht die Flash-Maske so wie im Bild aus. Das eep kommt also ins elf-Feld? Danke!

ciao gustav

Angehängte Dateien:
(Firma: 1984now) #7879090
Lesenswert?

Karl B. schrieb:

Bei mir sieht die Flash-Maske so wie im Bild aus. Das eep kommt also ins elf-Feld?

Darum ging es überhaupt nicht. Schon deshalb nicht, weil es bei Assemblerprojekten mit der AVR-Toolchain überhaupt kein *.elf gibt. Da gibt es ein *.hex und, wenn man das richtige Häkchen im GUI setzt (Projekteigenschaften->Toolchain) zusätzlich auch noch ein *.eep.

Und auf diese beiden Dateien muß man dann in dem von dir gezeigten Dialog verweisen, in den Groupboxen "Flash" (da gehört die *.hex hin) bzw. "EEPROM" (da gehört die *.eep hin).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren