Envist problem med mega88/AVR studio

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
MBY
Inlägg: 89
Blev medlem: 8 juni 2003, 10:50:01

Envist problem med mega88/AVR studio

Inlägg av MBY »

Att lära sig AVR går som smort, förutom när det kommer till AD-omvandling...


ATmega88 har ett gäng ADC, eller hur? Men hur i utböle initierar jag dem?

AVR Studio 4 vägrar prompt att assemblera dessa rader:

Kod: Markera allt

.include "m88def.inc"
[massa kod]

ldi Temp, 0x00
out ADMUX, Temp ; Vägrar

ldi temp,0x08
out adcsra,Temp ; Vägrar också


[massa kod]
Felet jag får är "Illegal argument or count".
Byter jag ut definitionsfilen till m103def.inc (vilket ju är en helt annan µC) så kompilerar koden.

Varför kan jag inte kompilera för mega88?
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag skulle tro att det har med namnen 'ADMUX' och 'adcsra' att göra, de kanske är så att de hänger på någon macro eller egentligen ska heta något annat.

Kolla din definitionsfil om den finns i ren text.
MBY
Inlägg: 89
Blev medlem: 8 juni 2003, 10:50:01

Inlägg av MBY »

Icecap skrev:Jag skulle tro att det har med namnen 'ADMUX' och 'adcsra' att göra, de kanske är så att de hänger på någon macro eller egentligen ska heta något annat.

Kolla din definitionsfil om den finns i ren text.
Ja, jag har tittar i definitionsfilerna och där är allt minst sagt förvirrande. I databladet till mega48/88 anges "ADMUX" och "ADCSRA" som "portar", dvs de skrivs och läses precis som DDRB, etc.

Efter massvis med surfande och rotande i datablad samt definitionsfiler framstår allting än mer oklart. Ibland tycks ADMUX vara ett register, varvid "LDI ADMUX,nn" torde fungera. Men icke. För de flesta µC förefaller ADMUX vara (port eller register) med adress 0x07, men ibland 0x7C.

På det hela taget blir jag inte klok på detta. Det jag vill göra är ytterst enkelt: Koppla en potentiometer till valfri förbannad pinne på min mega88 och skriva ut det "digitaliserade" värdet på lysdioderna på min STK500. (Edit: En källkodsdump, i asm, för detta - med eller utan "ADblabla" - mottages tacksamt!)


Så här ser m88def.inc (som ligger i katalogen 'appnotes' - konstigt ställe):
...
.equ ADMUX =$7C
...

Lite längre ner i samma fil finns följande grekiska:
;**********AD_CONVERTER***************
;ADMUX:
.equ REFS1 =7
.equ REFS0 =6
.equ ADLAR =5
.equ MUX3 =3
.equ MUX2 =2
.equ MUX1 =1
.equ MUX0 =0

och i m103def.inc ser det ut om följer:
...
.equ ADMUX =$07
.equ ADCSR =$06
...

I databladet för "48/88/168" är ADMUX $7C, men jag har inte klart för mig om det är en minnesadress, port eller konstant.

I korthet: Jag tycks inte kunna ställa in bitar i ADMUX. Varesig med "out", "ldi", "sbi" eller "sbr".


Edit2: Efter uppgradering till Studio 4.11 får jag ett annat fel:
out ADMUX,temp ger "Operand 1 out of range: 0x7C".
Senast redigerad av MBY 3 oktober 2005, 16:49:00, redigerad totalt 1 gång.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Här finns lite hjälp om hur man använder ADC i C i alla fall: URL till AVRFreaks

Kanske kan ge dig någon idé.

Har du gjort någon initiering av ADC, eller behövs inte det?
MBY
Inlägg: 89
Blev medlem: 8 juni 2003, 10:50:01

Inlägg av MBY »

MicaelKarlsson skrev:Här finns lite hjälp om hur man använder ADC i C i alla fall: URL till AVRFreaks

Kanske kan ge dig någon idé.

Har du gjort någon initiering av ADC, eller behövs inte det?
Tack! Ska se om det ger något, har grottat på AVR-freaks i timmar nu!
MicaelKarlsson skrev: Har du gjort någon initiering av ADC, eller behövs inte det?
Tja, det är väl just det jag försöker göra. Antar jag. :)


Edit: Argh. Exempelkoden är i C. Inget fel med C, men just att översätta "ADMUX = nn" till asm är ju det som vållar problem.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Ett skott i mörkret!!

Inlägg av MicaelKarlsson »

Har en freware-version av CodeVisionAVR och testatde att generera C-kod för ADC på en Mega8 (Mega88 finns inte) och den ser ut så här:

Kod: Markera allt

/*********************************************
This program was produced by the
CodeWizardAVR V1.23.2 Evaluation
Automatic Program Generator
© Copyright 1998-2002 HP InfoTech s.r.l.
http://www.hpinfotech.ro
e-mail:office@hpinfotech.ro , hpinfotech@xmail.ro

Project : 
Version : 
Date    : 2005-10-03
Author  : 
Company : 
Comments: 


Chip type           : ATmega8
Program type        : Application
Clock frequency     : 4,000000 MHz
Memory model        : Small
Internal SRAM size  : 1024
External SRAM size  : 0
Data Stack size     : 256
*********************************************/

#include <mega8.h>

#define ADC_VREF_TYPE 0x00
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In 
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
ASSR=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GICR=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 2000,000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x81;
SFIOR=0x00;

while (1)
      {
      // Place your code here

      };
}
Hoppas det kanske kan ge dig något tips på hur du skall göra.

EDIT: Har du tillgång till boken: "AVR An Introductory Course" av John Morton så finns det lite kod på sid. 105 och framåt.

/Lycka till!!
MBY
Inlägg: 89
Blev medlem: 8 juni 2003, 10:50:01

Inlägg av MBY »

Tack för hjälpen, men tyvärr så hjälper det inte AVR Studio. Vad jag än försöker göra med ADMUX så går det inte - om man inte använder m103def.inc, vilket ju är en annan prolle.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Ett nytt skott i mörkret!!

Inlägg av MicaelKarlsson »

Vad gör du med ADCSR?

Testa:

Kod: Markera allt

Start:
cbi   ADMUX,0
sbi   ADCSR,ADSC
sbic  ADCSR,ADSC
RJMP Start+2
Hittade det i Mortons bok.

/Lycka till[/code]
MBY
Inlägg: 89
Blev medlem: 8 juni 2003, 10:50:01

Re: Ett nytt skott i mörkret!!

Inlägg av MBY »

MicaelKarlsson skrev:Vad gör du med ADCSR?

Testa:

Kod: Markera allt

Start:
1. cbi   ADMUX,0
2. sbi   ADCSR,ADSC
3. sbic  ADCSR,ADSC
4. RJMP Start+2
Hittade det i Mortons bok.

/Lycka till[/code]
(jag har numrerat raderna)

Ok. Rad 1 orsakar "Operand 1 out of range: 0x7c"
Rad 2 orsakar "Undefined symbol: ADCSR"
Rad 3 lika så.

Av outgrundlig anledning hittar jag absolut inget på amtels hemsida eller AVR freaks dito. Antingen är detta ett nybörjarfel, och de borde dugga tätt av guider, eller så är det fel på AVR Studio, och de borde finnas gott om dokumentation. Eller så är det bara jag.

Det verkar som AVR Studio inte tror att register (eller vad fanken nu det handlar om) kan ha höga adresser som 7c.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Kan du lägga upp hela koden kan jag testa och se om jag kommer fram till något.

EDIT: Ta en titt
Senast redigerad av MicaelKarlsson 3 oktober 2005, 17:54:56, redigerad totalt 1 gång.
MBY
Inlägg: 89
Blev medlem: 8 juni 2003, 10:50:01

Inlägg av MBY »

Japp. Tack, för övrigt, för att du tar dig tid. Förlåt, för att jag tar din tid. :p

Kod: Markera allt

.include "m88def.inc"

.def	Temp = 	R16          
.def 	Count = R17
.org 	0x0000             
   	rjmp  	RESET      

RESET:                  

	ldi	TEMP,low(RAMEND)	; Set stackptr to ram end
	out	SPL,TEMP

	cbi   ADMUX,0
	


	

   	
	ldi		Temp, 	0xFF
   	out 	DDRB, 	Temp
   	ldi 	Temp,	0x00
   	out 	DDRD, 	Temp
  	
	


Loop: 

	in	Temp,ADCH
	out	PORTB,Temp
	rjmp Loop

Koden är stökig, eftersom jag klippt och klistrat från ett anna projekt. Har tagit bort en del.

Om jag använder definitionen för mega16 i stället så verkar allt fungera. Tråkigt värre, att det är mega88 jag vill använda!

Här är hela definitionsfilen m88def.inc:

Kod: Markera allt

;***************************************************************************
;* A P P L I C A T I O N   N O T E   F O R   T H E   A V R   F A M I L Y
;* 
;* Number            : AVR000
;* File Name         : "m88def.inc" 
;* Title             : Register/Bit Definitions for the ATMEGA88 
;* Date              : 14.01.2004
;* Version           : 
;* Support E-mail    : avr@atmel.com
;* Target MCU        : ATMEGA88 
;* 
;* DESCRIPTION
;* When including this file in the assembly program file, all I/O register 
;* names and I/O register bit names appearing in the data book can be used.
;* In addition, the six registers forming the three data pointers X, Y and 
;* Z have been assigned names XL - ZH. Highest RAM address for Internal 
;* SRAM is also defined 
;* 
;* The Register names are represented by their hexadecimal address.
;* 
;* The Register Bit names are represented by their bit number (0-7).
;* 
;* Please observe the difference in using the bit names with instructions
;* such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" 
;* (skip if bit in register set/cleared). The following example illustrates
;* this:
;* 
;* in    r16,PORTB             ;read PORTB latch
;* sbr   r16,(1<<PB6)+(1<<PB5) ;set PB6 and PB5 (use masks, not bit#)
;* out   PORTB,r16             ;output to PORTB
;* 
;* in    r16,TIFR              ;read the Timer Interrupt Flag Register
;* sbrc  r16,TOV0              ;test the overflow flag (use bit#)
;* rjmp  TOV0_is_set           ;jump if set
;* ...                         ;otherwise do something else
;***************************************************************************

;***** SPECIFY DEVICE ******************************************************
.device ATmega88

;***** MEMORY MAPPED I/O REGISTER DEFINITIONS (&FF-$60) ********************
.equ  UDR0       =$C6
.equ  UBRR0H     =$C5
.equ  UBRR0L     =$C4
.equ  UCSR0C     =$C2
.equ  UCSR0B     =$C1
.equ  UCSR0A     =$C0
.equ  TWAMR      =$BD
.equ  TWCR       =$BC
.equ  TWDR       =$BB
.equ  TWAR       =$BA
.equ  TWSR       =$B9
.equ  TWBR       =$B8
.equ  ASSR       =$B6
.equ  OCR2B      =$B4
.equ  OCR2A      =$B3
.equ  TCNT2      =$B2
.equ  TCCR2B     =$B1
.equ  TCCR2A     =$B0
.equ  OCR1BH     =$8B
.equ  OCR1BL     =$8A
.equ  OCR1AH     =$89
.equ  OCR1AL     =$88
.equ  ICR1H      =$87
.equ  ICR1L      =$86
.equ  TCNT1H     =$85
.equ  TCNT1L     =$84
.equ  TCCR1C     =$82
.equ  TCCR1B     =$81
.equ  TCCR1A     =$80
.equ  DIDR1      =$7F
.equ  DIDR0      =$7E
.equ  ADMUX      =$7C
.equ  ADCSRB     =$7B
.equ  ADCSRA     =$7A
.equ  ADCH       =$79
.equ  ADCL       =$78
.equ  TIMSK2     =$70
.equ  TIMSK1     =$6F
.equ  TIMSK0     =$6E
.equ  PCMSK2     =$6D
.equ  PCMSK1     =$6C
.equ  PCMSK0     =$6B
.equ  EICRA      =$69
.equ  PCICR      =$68
.equ  OSCCAL     =$66
.equ  PRR        =$64
.equ  CLKPR      =$61
.equ  WDTCSR     =$60

;***** I/O REGISTER DEFINITIONS ($3F-$00) **********************************
.equ  SREG       =$3F
.equ  SPH        =$3E
.equ  SPL        =$3D
.equ  SPMCSR     =$37
.equ  MCUCR      =$35
.equ  MCUSR      =$34
.equ  SMCR       =$33
.equ  MONDR      =$31
.equ  ACSR       =$30
.equ  SPDR       =$2E
.equ  SPSR       =$2D
.equ  SPCR       =$2c
.equ  GPIOR2     =$2B
.equ  GPIOR1     =$2A
.equ  OCR0B      =$28
.equ  OCR0A      =$27
.equ  TCNT0      =$26
.equ  TCCR0B     =$25
.equ  TCCR0A     =$24
.equ  GTCCR      =$23
.equ  EEARH      =$22
.equ  EEARL      =$21
.equ  EEDR       =$20
.equ  EECR       =$1F
.equ  GPIOR0     =$1E
.equ  EIMSK      =$1D
.equ  EIFR       =$1C
.equ  PCIFR      =$1B
.equ  TIFR2      =$17
.equ  TIFR1      =$16
.equ  TIFR0      =$15
.equ  PORTD      =$0B
.equ  DDRD       =$0A
.equ  PIND       =$09
.equ  PORTC      =$08
.equ  DDRC       =$07
.equ  PINC       =$06
.equ  PORTB      =$05
.equ  DDRB       =$04
.equ  PINB       =$03


;***** BIT DEFINITIONS *****************************************************

;**********USART0*********************
;UDR0:
;UCSR0A:
.equ  RXC0       =7
.equ  TXC0       =6
.equ  UDRE0      =5
.equ  FE0        =4
.equ  DOR0       =3
.equ  UPE0       =2
.equ  U2X0       =1
.equ  MPCM0      =0
;UCSR0B:
.equ  RXCIE0     =7
.equ  TXCIE0     =6
.equ  UDRIE0     =5
.equ  RXEN0      =4
.equ  TXEN0      =3
.equ  UCSZ02     =2
.equ  RXB80      =1
.equ  TXB80      =0
;UCSR0C:
.equ  UMSEL01    =7
.equ  UMSEL00    =6
.equ  UPM01      =5
.equ  UPM00      =4
.equ  USBS0      =3
.equ  UCSZ01     =2
.equ  UCSZ00     =1
.equ  UCPOL0     =0

;**********TWI************************

;TWCR:
.equ  TWINT      =7
.equ  TWEA       =6
.equ  TWSTA      =5
.equ  TWSTO      =4
.equ  TWWC       =3
.equ  TWEN       =2
.equ  TWIE       =0
;TWSR:
.equ  TWS7       =7
.equ  TWS6       =6
.equ  TWS5       =5
.equ  TWS4       =4
.equ  TWS3       =3
.equ  TWPS1      =1
.equ  TWPS0      =0

;TWAR:
.equ  TWA6       =7
.equ  TWA5       =6
.equ  TWA4       =5
.equ  TWA3       =4
.equ  TWA2       =3
.equ  TWA1       =2
.equ  TWA0       =1
.equ  TWGCE      =0

;**********TIMER_COUNTER_1************
;TIMSK1:
.equ  ICIE1      =5
.equ  OCIE1B     =2
.equ  OCIE1A     =1
.equ  TOIE1      =0
;TIFR1:
.equ  ICF1       =5
.equ  OCF1B      =2
.equ  OCF1A      =1
.equ  TOV1       =0
;TCCR1A:
.equ  COM1A1     =7
.equ  COM1A0     =6
.equ  COM1B1     =5
.equ  COM1B0     =4
.equ  WGM11      =1
.equ  WGM10      =0
;TCCR1B:
.equ  ICNC1      =7
.equ  ICES1      =6
.equ  WGM13      =4
.equ  WGM12      =3
.equ  CS12       =2
.equ  CS11       =1
.equ  CS10       =0
;TCCR1C:
.equ  FOC1A      =7
.equ  FOC1B      =6
;
;**********TIMER_COUNTER_2************
;TIMSK2:
.equ  OCIE2B     =2
.equ  OCIE2A     =1
.equ  TOIE2A     =0
;TIFR2:
.equ  OCF2B      =2
.equ  OCF2A      =1
.equ  TOV2       =0
;TCCR2A:
.equ  COM2A1     =7
.equ  COM2A0     =6
.equ  COM2B1     =5
.equ  COM2B0     =4
.equ  WGM21      =1
.equ  WGM20      =0
;TCCR2B:
.equ  FOC2A      =7
.equ  FOC2B      =6
.equ  WGM22      =3
.equ  CS22       =2
.equ  CS21       =1
.equ  CS20       =0
;ASSR:
.equ  EXCLK      =6
.equ  AS2        =5
.equ  TCN2UB     =4
.equ  OCR2AUB    =3
.equ  OCR2BUB    =2
.equ  TCR2AUB    =1
.equ  TCR2BUB    =0
;GTCCR:
.equ  PSRASY     =1

;**********AD_CONVERTER***************
;ADMUX:
.equ  REFS1      =7
.equ  REFS0      =6
.equ  ADLAR      =5
.equ  MUX3       =3
.equ  MUX2       =2
.equ  MUX1       =1
.equ  MUX0       =0
;ADCH:
.equ  ADCH7      =7
.equ  ADCH6      =6
.equ  ADCH5      =5
.equ  ADCH4      =4
.equ  ADCH3      =3
.equ  ADCH2      =2
.equ  ADCH1      =1
.equ  ADCH0      =0
;ADCL:
.equ  ADCL7      =7
.equ  ADCL6      =6
.equ  ADCL5      =5
.equ  ADCL4      =4
.equ  ADCL3      =3
.equ  ADCL2      =2
.equ  ADCL1      =1
.equ  ADCL0      =0
;ADCSRA:
.equ  ADEN       =7
.equ  ADSC       =6
.equ  ADATE      =5
.equ  ADIF       =4
.equ  ADIE       =3
.equ  ADPS2      =2
.equ  ADPS1      =1
.equ  ADPS0      =0
;ADCSRB:
.equ  ACME       =6
.equ  ATDS2      =2
.equ  ADTS1      =1
.equ  ADTS0      =0
;DIDR0:
.equ  ADC5D      =5
.equ  ADC4D      =4
.equ  ADC3D      =3
.equ  ADC2D      =2
.equ  ADC1D      =1
.equ  ADC0D      =0

;**********ANALOG_COMPARATOR**********
;ACSR:
.equ  ACD        =7
.equ  ACBG       =6
.equ  ACO        =5
.equ  ACI        =4
.equ  ACIE       =3
.equ  ACIC       =2
.equ  ACIS1      =1
.equ  ACIS0      =0
;DIDR1:
.equ  AIN1D      =1
.equ  AIN0D      =0

;**********PORTB**********************
;PORTB:
.equ  PORTB7     =7
.equ  PORTB6     =6
.equ  PORTB5     =5
.equ  PORTB4     =4
.equ  PORTB3     =3
.equ  PORTB2     =2
.equ  PORTB1     =1
.equ  PORTB0     =0
;DDRB:
.equ  DDRB7      =7
.equ  DDRB6      =6
.equ  DDRB5      =5
.equ  DDRB4      =4
.equ  DDRB3      =3
.equ  DDRB2      =2
.equ  DDRB1      =1
.equ  DDRB0      =0
;PINB:
.equ  PINB7      =7
.equ  PINB6      =6
.equ  PINB5      =5
.equ  PINB4      =4
.equ  PINB3      =3
.equ  PINB2      =2
.equ  PINB1      =1
.equ  PINB0      =0

;**********PORTC**********************
;PORTC:
.equ  PORTC6     =6
.equ  PORTC5     =5
.equ  PORTC4     =4
.equ  PORTC3     =3
.equ  PORTC2     =2
.equ  PORTC1     =1
.equ  PORTC0     =0
;DDRC:
.equ  DDRC6      =6
.equ  DDRC5      =5
.equ  DDRC4      =4
.equ  DDRC3      =3
.equ  DDRC2      =2
.equ  DDRC1      =1
.equ  DDRC0      =0
;PINC:
.equ  PINC6      =6
.equ  PINC5      =5
.equ  PINC4      =4
.equ  PINC3      =3
.equ  PINC2      =2
.equ  PINC1      =1
.equ  PINC0      =0

;**********PORTD**********************
;PORTD:
.equ  PORTD7     =7
.equ  PORTD6     =6
.equ  PORTD5     =5
.equ  PORTD4     =4
.equ  PORTD3     =3
.equ  PORTD2     =2
.equ  PORTD1     =1
.equ  PORTD0     =0
;DDRD:
.equ  DDRD7      =7
.equ  DDRD6      =6
.equ  DDRD5      =5
.equ  DDRD4      =4
.equ  DDRD3      =3
.equ  DDRD2      =2
.equ  DDRD1      =1
.equ  DDRD0      =0
;PIND:
.equ  PIND7      =7
.equ  PIND6      =6
.equ  PIND5      =5
.equ  PIND4      =4
.equ  PIND3      =3
.equ  PIND2      =2
.equ  PIND1      =1
.equ  PIND0      =0

;**********TIMER_COUNTER_0************
;OCR0B:
;OCR0A:
;TCNT0:
;TCCR0B:
.equ  FOC0A      =7
.equ  FOC0B      =6
.equ  WGM02      =3
.equ  CS02       =2
.equ  CS01       =1
.equ  CS00       =0
;TCCR0A:
.equ  COM0A1     =7
.equ  COM0A0     =6
.equ  COM0B1     =5
.equ  COM0B0     =4
.equ  WGM01      =1
.equ  WGM00      =0
;TIMSK0:
.equ  OCIE0B     =2
.equ  OCIE0A     =1
.equ  TOIE0      =0
;TIFR0:
.equ  OCF0B      =2
.equ  OCF0A      =1
.equ  TOV0       =0
;GTCCR:
.equ  TSM        =7
.equ  PSRSYNC    =0

;**********EXTERNAL_INTERRUPT*********
;EICRA:
.equ  ISC11      =3
.equ  ISC10      =2
.equ  ISC01      =1
.equ  ISC00      =0
;EIMSK:
.equ  INT1       =1
.equ  INT0       =0
;EIFR:
.equ  INTF1      =1
.equ  INTF0      =0
;PCMSK2:
.equ  PCINT23    =7
.equ  PCINT22    =6
.equ  PCINT21    =5
.equ  PCINT20    =4
.equ  PCINT19    =3
.equ  PCINT18    =2
.equ  PCINT17    =1
.equ  PCINT16    =0
;PCMSK1:
.equ  PCINT14    =6
.equ  PCINT13    =5
.equ  PCINT12    =4
.equ  PCINT11    =3
.equ  PCINT10    =2
.equ  PCINT9     =1
.equ  PCINT8     =0
;PCMSK0:
.equ  PCINT7     =7
.equ  PCINT6     =6
.equ  PCINT5     =5
.equ  PCINT4     =4
.equ  PCINT3     =3
.equ  PCINT2     =2
.equ  PCINT1     =1
.equ  PCINT0     =0
;PCIFR:
.equ  PCIF2      =2
.equ  PCIF1      =1
.equ  PCIF0      =0

;**********SPI************************
;SPSR:
.equ  SPIF       =7
.equ  WCOL       =6
.equ  SPI2X      =0
;SPCR:
.equ  SPIE       =7
.equ  SPE        =6
.equ  DORD       =5
.equ  MSTR       =4
.equ  CPOL       =3
.equ  CPHA       =2
.equ  SPR1       =1
.equ  SPR0       =0

;**********CPU************************
;PCICR:
.equ  PCIE2      =2
.equ  PCIE1      =1
.equ  PCIE0      =0
;PRR:
.equ  PRTWI      =7
.equ  PRTIM2     =6
.equ  PRTIM0     =5
.equ  PRTIM1     =3
.equ  PRSPI      =2
.equ  PRUSART0   =1
.equ  PRADC      =0

;CLKPR:
.equ  CLKPCE     =7
.equ  CLKPS3     =3
.equ  CLKPS2     =2
.equ  CLKPS1     =1
.equ  CLKPS0     =0
;SREG:
;SPH:
.equ  SP9        =1
.equ  SP8        =0
;SPL:
.equ  SP7        =7
.equ  SP6        =6
.equ  SP5        =5
.equ  SP4        =4
.equ  SP3        =3
.equ  SP2        =2
.equ  SP1        =1
.equ  SP0        =0
;SPMCSR:
.equ  SPMIE      =7
.equ  RWWSB      =6
.equ  RWWSRE     =4
.equ  BLBSET     =3
.equ  PGWRT      =2
.equ  PGERS      =1
.equ  SELFPRGEN  =0
;MCUCR:
.equ  PUD        =4
.equ  IVSEL      =1
.equ  IVCE       =0
;MCUSR:
.equ  WDRF       =3
.equ  BORF       =2
.equ  EXTREF     =1
.equ  PORF       =0
;SMCR:
.equ  SM2        =3
.equ  SM1        =2
.equ  SM0        =1
.equ  SE         =0
;MONDR:
.equ  MONDR7     =7
.equ  MONDR6     =6
.equ  MONDR5     =5
.equ  MONDR4     =4
.equ  MONDR3     =3
.equ  MONDR2     =2
.equ  MONDR1     =1
.equ  MONDR0     =0
;GPIOR2:
.equ  GPIOR27    =7
.equ  GPIOR26    =6
.equ  GPIOR25    =5
.equ  GPIOR24    =4
.equ  GPIOR23    =3
.equ  GPIOR22    =2
.equ  GPIOR21    =1
.equ  GPIOR20    =0
;GPIOR1:
.equ  GPIOR17    =7
.equ  GPIOR16    =6
.equ  GPIOR15    =5
.equ  GPIOR14    =4
.equ  GPIOR13    =3
.equ  GPIOR12    =2
.equ  GPIOR11    =1
.equ  GPIOR10    =0
;GPIOR0:
.equ  GPIOR07    =7
.equ  GPIOR06    =6
.equ  GPIOR05    =5
.equ  GPIOR04    =4
.equ  GPIOR03    =3
.equ  GPIOR02    =2
.equ  GPIOR01    =1
.equ  GPIOR00    =0

;**********WATCHDOG*******************
;WDTCSR:
.equ  WDIF       =7
.equ  WDIE       =6
.equ  WDP3       =5
.equ  WDCE       =4
.equ  WDE        =3
.equ  WDP2       =2
.equ  WDP1       =1
.equ  WDP0       =0

;**********EEPROM*********************
;EEARH:
.equ  EEAR8      =0
;EEARL:
.equ  EEAR7      =7
.equ  EEAR6      =6
.equ  EEAR5      =5
.equ  EEAR4      =4
.equ  EEAR3      =3
.equ  EEAR2      =2
.equ  EEAR1      =1
.equ  EEAR0      =0
;EEDR:
.equ  EEDR7      =7
.equ  EEDR6      =6
.equ  EEDR5      =5
.equ  EEDR4      =4
.equ  EEDR3      =3
.equ  EEDR2      =2
.equ  EEDR1      =1
.equ  EEDR0      =0
;EECR:
.equ  EEPM1      =5
.equ  EEPM0      =4
.equ  EERIE      =3
.equ  EEMPE      =2
.equ  EEPE       =1
.equ  EERE       =0

;***** LOCKS AND FUSES *****************************************************
;lockbits
.equ  LB1         =0    ;Lock bit
.equ  LB2         =1    ;Lock bit
.equ  BLB01       =2    ;Boot Lock bit
.equ  BLB02       =3    ;Boot Lock bit
.equ  BLB11       =4    ;Boot lock bit
.equ  BLB12       =5    ;Boot lock bit

;low fuse bits
.equ  CKDIV8      =7    ;Divide clock by 8
.equ  CKOUT       =6    ;Clock output
.equ  SUT1        =5    ;Select start-up time
.equ  SUT0        =4    ;Select start-up time
.equ  CKSEL3      =3    ;Select Clock Source
.equ  CKSEL2      =2    ;Select Clock Source
.equ  CKSEL1      =1    ;Select Clock Source
.equ  CKSEL0      =0    ;Select Clock Source

;high fuse bits
.equ  RSTDISBL    =7    ;External reset disable
.equ  DWEN        =6    ;debugWIRE Enable
.equ  SPIEN       =5    ;Enable Serial programming and Data Downloading
.equ  WDTON       =4    ;Watchdog Timer Always On
.equ  EESAVE      =3    ;EEPROM memory is preserved through chip erase
.equ  BODLEVEL2   =2    ;Brown-out Detector trigger level
.equ  BODLEVEL1   =1    ;Brown-out Detector trigger level
.equ  BODLEVEL0   =0    ;Brown-out Detector trigger level

;extended fuse bits
.equ  BOOTSZ1     =2    ;Select boot size
.equ  BOOTSZ0     =1    ;Select boot size
.equ  BOOTRST     =0    ;Select reset vector

;***** CPU REGISTER DEFINITIONS ********************************************
.def    XL    = r26
.def    XH    = r27
.def    YL    = r28
.def    YH    = r29
.def    ZL    = r30
.def    ZH    = r31

;***** DATA MEMORY DECLARATIONS ********************************************
.equ  RAMEND     = $4FF
.equ  XRAMEND    = $4FF
.equ  E2END  = $1FF

;***** PROGRAM MEMORY DECLARATIONS *****************************************
.equ  FLASHEND     = $FFF

;** Bootvectors **
.equ  SMALLBOOTSTART      =0xF80
.equ  SECONDBOOTSTART     =0xF00
.equ  THIRDBOOTSTART      =0xE00
.equ  LARGEBOOTSTART      =0xC00
.equ  PAGESIZE            =32

;***** INTERRUPT VECTORS ***************************************************
.equ  INT0addr       = $001    ; External Interrupt Request 0
.equ  INT1addr       = $002    ; External Interrupt Request 1
.equ  PCI0addr       = $003    ; Pin Change Interrupt Request 0
.equ  PCI1addr       = $004    ; Pin Change Interrupt Request 0
.equ  PCI2addr       = $005    ; Pin Change Interrupt Request 1
.equ  WDTaddr        = $006    ; Watchdog Time-out Interrupt
.equ  OC2Aaddr       = $007    ; Timer/Counter2 Compare Match A
.equ  OC2Baddr       = $008    ; Timer/Counter2 Compare Match A
.equ  OVF2addr       = $009    ; Timer/Counter2 Overflow
.equ  ICP1addr       = $00A    ; Timer/Counter1 Capture Event
.equ  OC1Aaddr       = $00B    ; Timer/Counter1 Compare Match A
.equ  OC1Baddr       = $00C    ; Timer/Counter1 Compare Match B
.equ  OVF1addr       = $00D    ; Timer/Counter1 Overflow
.equ  OC0Aaddr       = $00E    ; TimerCounter0 Compare Match A
.equ  OC0Baddr       = $00F    ; TimerCounter0 Compare Match B
.equ  OVF0addr       = $010    ; Timer/Couner0 Overflow
.equ  SPIaddr        = $011    ; SPI Serial Transfer Complete
.equ  URXCaddr       = $012    ; USART Rx Complete
.equ  UDREaddr       = $013    ; USART, Data Register Empty
.equ  UTXCaddr       = $014    ; USART Tx Complete
.equ  ADCaddr        = $015    ; ADC Conversion Complete
.equ  ERDYaddr       = $016    ; EEPROM Ready
.equ  ACIaddr        = $017    ; Analog Comparator
.equ  TWIaddr        = $018    ; Two-wire Serial Interface
.equ  SPMRaddr       = $019    ; Store Program Memory Read


;***** END OF FILE *********************************************************

Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Trodde det var den sista kodsnutten :shock: :shock:

Men så lugnade jag ner mig lite :D

Koden fungerar för Mega8 också.

Ta en titt!
MBY
Inlägg: 89
Blev medlem: 8 juni 2003, 10:50:01

Inlägg av MBY »

Nu tappade du bort mig!

AT90S8515 - den har väl ingen ADC? Har den inte bara en eller ett par analoga komparatorer?

(visseligen kan man ju, om man prompt måste, göra ADC med komparatorer)

Men koden ser klart intressant ut. Ska pröva. Tack!
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Har inte heller hittat någon ADC i 8515 :)

Ta en titt bland dessa Application notes

Hoppas det hjälper!!

Lycka till!!
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Skriv svar