www.mikrocontroller.net

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


Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael H. (michael_h45)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

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

MfG Spess

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

out   -> sts
TIMSK -> TIMSK1

MfG Spess

Autor: Ich (Gast)
Datum:

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

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.