Forum: Mikrocontroller und Digitale Elektronik Dämlicher Assembler (AVR)


von Paul H. (powl)


Lesenswert?

Hi!

Habe grade folgendes Problem. Um 7-Segmentanzeigen ansteuern zu können 
habe ich mir im Flash eine Tabelle angelegt:

digits:
.db    0b11101110    ; 0
.db    0b01100000    ; 1
.db    0b11001101    ; 2
.db    0b11101001    ; 3
.db    0b01100011    ; 4
.db    0b10101011    ; 5
.db    0b10101111    ; 6
.db    0b11100000    ; 7
.db    0b11101111    ; 8
.db    0b11101011    ; 9

Hier meldet mir der Assembler aber für jede Zeile:
warning: .cseg .db misalignment - padding zero byte

D.h. er hängt an jedes Byte noch eine 0 dran da der Flash ja 
Wortorganisiert ist. Ja toll, ich möchte aber einfach dass alle Bytes 
einfach hintereinander stehen, ohne 0en dazwischen. Wenn ich folgende 
Schreibweise verwende funktioniert es.

digits:
.db    0b11101110, 0b01100000
.db    0b11001101, 0b11101001
.db    0b01100011, 0b10101011
.db    0b10101111, 0b11100000
.db    0b11101111, 0b11101011

Es funktioniert so zwar aber sieht nicht hübsch aus. Muss ich irgendwo 
noch was einstellen?

mfg Paul H.

von Thorsten (Gast)


Lesenswert?

Was kann der Assembler für die Flash Organisation im AVR?

entweder du machst die tabellen einträge gradzahlig oder du lebst mit 
der fehlermeldung.

von Spess53 (Gast)


Lesenswert?

Hi

Wenn du es 'hübsch' haben willst, musst du halt mit dem doppelten 
Tabellenoffset rechnen.

MfG Spess

von Peter D. (peda)


Lesenswert?

Man kann es auch richtig hübsch machen, damit es egal ist, wo welches 
Segment angeschlossen ist.

Ich ordne die Pins immer für ein optimales Layout zu und dann trage ich 
die Zuordnung im Programm ein:
1
.equ    _A      = 0x10                          ;segment order
2
.equ    _B      = 0x08
3
.equ    _C      = 0x04
4
.equ    _D      = 0x02
5
.equ    _E      = 0x01
6
.equ    _F      = 0x40
7
.equ    _G      = 0x20
8
.equ    _DP     = 0x80                          ;decimal point
9
10
.equ    _0      = ~( _A+_B+_C+_D+_E+_F    )     ;number pattern, low active
11
.equ    _1      = ~(    _B+_C             )
12
.equ    _2      = ~( _A+_B+   _D+_E+   _G )
13
.equ    _3      = ~( _A+_B+_C+_D+      _G )
14
.equ    _4      = ~(    _B+_C+      _F+_G )
15
.equ    _5      = ~( _A+   _C+_D+   _F+_G )
16
.equ    _6      = ~( _A+   _C+_D+_E+_F+_G )
17
.equ    _7      = ~( _A+_B+_C             )
18
.equ    _8      = ~( _A+_B+_C+_D+_E+_F+_G )
19
.equ    _9      = ~( _A+_B+_C+_D   +_F+_G )
20
.equ    Blank   = ~( 0                    )
21
.equ    Minus   = ~(                   _G )
22
23
number_code:
24
        .db     _0, _1, _2, _3, _4, _5, _6, _7, _8, _9


Peter

von Paul H. (powl)


Lesenswert?

ok hab gerade im tutorial den entsprechenden code-teil entdeckt der die 
wortweise adressierung berücksichtigt. danke.

mfg paul h.

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.