Forum: Mikrocontroller und Digitale Elektronik vom Atmega 8 zum Atmega 168


von Ich (Gast)


Lesenswert?

Hallo!
Habe soeben von Reichelt µC geliefert bekommen und wollte sofort mit AVR 
Studio loslegen. Leider funktioniert es nicht. Hier mal der obere teil 
des Code. Hat jemand eine Idee?????  Daaaaanke!
.include  "m168def.inc"
.cseg
.org 0
;----------------------------------------------------------------------- 
--------
; Reset and Interrupt vector             ;VNr.  Beschreibung
;----------------------------------------------------------------------- 
--------
.org 0x000
       rjmp main
.org INT0addr                 ; External Interrupt0 Vector Address
     reti
.org INT1addr                 ; External Interrupt1 Vector Address
     reti
.org OC2addr                  ; Output Compare2 Interrupt Vector Address
     reti
.org OVF2addr                 ; Overflow2 Interrupt Vector Address
     reti
.org ICP1addr                 ; Input Capture1 Interrupt Vector Address
     reti
.org OC1Aaddr                 ; Output Compare1A Interrupt Vector 
Address
       rjmp  TIMER
.org OC1Baddr                 ; Output Compare1B Interrupt Vector 
Address
       reti
.org OVF1addr                 ; Overflow1 Interrupt Vector Address
       reti
.org OVF0addr                 ; Overflow0 Interrupt Vector Address
       reti
.org SPIaddr                  ; SPI Interrupt Vector Address
     reti
.org URXCaddr                 ; USART Receive Complete Interrupt Vector 
Address
       reti
.org UDREaddr                 ; USART Data Reg. Empty Interr. Vector 
Address
       reti
.org UTXCaddr                 ; USART Transmit Complete Interrupt Vector 
Address
       reti
.org ADCCaddr                 ; ADC Interrupt Vector Address
       reti
.org ERDYaddr                 ; EEPROM Interrupt Vector Address
       reti
.org ACIaddr                  ; Analog Comparator Interrupt Vector 
Address
     reti
.org TWIaddr                  ; Irq. vector address for Two-Wire 
Interface
       reti


.org INT_VECTORS_SIZE

.equ    XTAL  =  3686400;H

;----------------------------------------------------------------------- 
--------
; Start, Power ON, Reset
;----------------------------------------------------------------------- 
--------
main:    ldi       r16, LOW(RAMEND)     ; Stackpointer initialisieren
          out       SPL, r16
          ldi       r16, HIGH(RAMEND)
          out       SPH, r16
      ldi       r16, high( 7200 - 1 )
           out       OCR1AH, r16
          ldi       r16, low( 7200 - 1 )
          out       OCR1AL, r16
          ldi       r16, ( 1 << WGM12 ) | ( 1 << CS12 )
          out       TCCR1B, r16

          ldi       r16, 1 << OCIE1A  ; OCIE1A: Interrupt bei Timer 
Compare
          out       TIMSK, r16

      sei

von Michael H. (michael_h45)


Lesenswert?

Ich schrieb:
> Leider funktioniert es nicht.

Bevor sich jetzt denkt "warum schreibt die Pfeife ned mehr, was soll man 
mit so einer "Fehlerbeschreibung" anfangen?!!?":
Fehlerbeschreibungen mit Inhalt gibts nur Dienstags bei wolkenlosem 
Himmel...

von Ich (Gast)


Lesenswert?

Ja, tut mir leid. 4 Errors beim versuch zu assemblieren

I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(15): Including file 
'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m168def.inc'
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(85): error: Operand 1 
out of range: 0x89
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(87): error: Operand 1 
out of range: 0x88
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(89): error: Operand 1 
out of range: 0x81
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(92): error: Undefined 
symbol: TIMSK
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(331): No EEPROM data, 
deleting I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.eep

von Michael H. (michael_h45)


Lesenswert?

Na da steht doch schon genauesten drin, wo das Problem ist...
Welche Zeile bereitet dir denn Schwierigkeiten?

von spess53 (Gast)


Lesenswert?

Hi

http://www.atmel.com/dyn/resources/prod_documents/doc2553.pdf

Gilt sinngemäß auch für ATMega8->ATMega168

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

out   -> sts
TIMSK -> TIMSK1

MfG Spess

von Ich (Gast)


Lesenswert?

Tut mir wirklich leid, ich brings aus eigenem Wissen nicht hin. Kann mir 
das jemand "umbauen"???

von Ich (Gast)


Lesenswert?

Hab jetzt selbst probiert:

;+---------------------------------------------------------------------- 
--------
.include  "m168def.inc"
.cseg
.org 0
;----------------------------------------------------------------------- 
--------
; Reset and Interrupt vector             ;VNr.  Beschreibung
;----------------------------------------------------------------------- 
--------
.org 0x000
       rjmp main
;.org INT0addr                 ; External Interrupt0 Vector Address
     reti
;.org INT1addr                 ; External Interrupt1 Vector Address
     reti
;.org OC2addr                  ; Output Compare2 Interrupt Vector 
Address
     reti
;.org OVF2addr                 ; Overflow2 Interrupt Vector Address
     reti
;.org ICP1addr                 ; Input Capture1 Interrupt Vector Address
     reti
     reti
     reti
     reti
     reti
     reti
;.org OC1Aaddr                 ; Output Compare1A Interrupt Vector 
Address
       rjmp  TIMER
;.org OC1Baddr                 ; Output Compare1B Interrupt Vector 
Address
        reti
;.org OVF1addr                 ; Overflow1 Interrupt Vector Address
     reti
;.org OVF0addr                 ; Overflow0 Interrupt Vector Address
     reti
;.org SPIaddr                  ; SPI Interrupt Vector Address
     reti
;.org URXCaddr                 ; USART Receive Complete Interrupt Vector 
Address
     reti
;.org UDREaddr                 ; USART Data Reg. Empty Interr. Vector 
Address
     reti
;.org UTXCaddr                 ; USART Transmit Complete Interrupt 
Vector Address
     reti
;.org ADCCaddr                 ; ADC Interrupt Vector Address
     reti
;.org ERDYaddr                 ; EEPROM Interrupt Vector Address
     reti
;.org ACIaddr                  ; Analog Comparator Interrupt Vector 
Address
     reti
;.org TWIaddr                  ; Irq. vector address for Two-Wire 
Interface
     reti
     reti
     reti
     reti


.org INT_VECTORS_SIZE

.equ    XTAL  =  3686400;H

;----------------------------------------------------------------------- 
--------
; Start, Power ON, Reset
;----------------------------------------------------------------------- 
--------
main:    ldi       r16, LOW(RAMEND)     ; Stackpointer initialisieren
          out       SPL, r16
          ldi       r16, HIGH(RAMEND)
          out       SPH, r16
      ldi       r16, high( 7200 - 1 )
           out       OCR1AH, r16
          ldi       r16, low( 7200 - 1 )
          out       OCR1AL, r16
          ldi       r16, ( 1 << WGM12 ) | ( 1 << CS12 )
          out       TCCR1B, r16

          ldi       r16, 1 << OCIE1A  ; OCIE1A: Interrupt bei Timer 
Compare
          out       TIMSK0, r16

      sei

das kommt dabei raus:

I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(15): Including file 
'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m168def.inc'
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(79): error: Operand 1 
out of range: 0x89
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(81): error: Operand 1 
out of range: 0x88
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(83): error: Operand 1 
out of range: 0x81
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(86): error: Operand 1 
out of range: 0x6e
I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.asm(325): No EEPROM data, 
deleting I:\Elektro\AVR Studio 
Projekte\Laufzeitueberwachung_Futterautomat_07.eep

von spess53 (Gast)


Lesenswert?

Hi

Also zu Mitschreiben:

>error: Operand 1 out of range: 0x89

bezieht sich auf

>           out       OCR1AH, r16

OCR1AH liegt aber beim ATMega168 in einem Adressbereich, der mit 'out' 
nicht mehr erreichbar ist. Deshalb muss auf OCR1AH zum Schreiben mit 
'sts' zugegriffen werden.

-> sts OCR1AH,r16

>Undefined symbol: TIMSK

Der ATMega168 hat kein TIMSK-Register. Hier hat jeder Timer ein eigenes 
TIMSK-Register.Also wird für Timer1 aus TIMSK  TIMSK1.

Außerdem stimmt deine Interruptvektortabelle nicht. Der ATMega168 hat 
mehr Interrupts.

Findest du aber alles in der oben verlinkten AppNote.

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
Noch kein Account? Hier anmelden.