sahra
19.10.2010, 11:37
hallo leute,
ich habe ein Programm geschrieben, mit dem will ich ein Takt über Poti erzeugen, aber leider hat es nicht funktionnier ich weiß nicht ob das an meinem Hardware liegt oder oder an dem programm: hier ist das Programm:
.include "m88def.inc"
; Anschlüße Port B
; PB0 Drehichtung
; PB1 Enable
; PD5 Takt
; PB4,PB5 sind Schalter
; Alle Anderen nicht belegt.
.def ADClow=r6
.def ADChigh=r7
.def rlow=r8
.def temp=r16 ;;temporäres Register (initialisierung, PortAusgabe)
.def temp2=r17
.def temp3=r18
;Registerzuweisung-------------------------------------------------------
;Interrupt Vektor Tabelle
rjmp RESET ; PCINT0 Handler
.org 0x003
rjmp Reset; PCINT0_7
rjmp RESET ; PCINT1 Handler
rjmp RESET ;PCINT2 ; PCINT2 Handler
rjmp RESET ;WDT ; Watchdog Timeout Handler
rjmp RESET ;TIM2_COMPA ; Timer2 CompareA Handler
rjmp RESET ;TIM2_COMPB ; Timer2 CompareB Handler
rjmp RESET ;TIM2_OVF ; Timer2 Overflow Handler
rjmp RESET ;TIM1_CAPT ; Timer1 Capture Handler
rjmp RESET ;TIM1_COMPA ; Timer1 CompareA Handler
rjmp RESET ;TIM1_COMPB ; Timer1 CompareB Handler
rjmp RESET ;TIM1_OVF ; Timer1 Overflow Handler
rjmp RESET ;TIM0_COMPA ; Timer0 CompareA Handler
rjmp RESET ;TIM0_COMPB ; Timer0 CompareB Handler
rjmp RESET ;TIM0_OVF ; Timer0 Overflow Handler
rjmp RESET ;SPI_STC ; SPI Transfer Complete Handler
rjmp RESET ;USART0_RXC ; USART0 RX Complete Handler
rjmp RESET ;USART0_UDRE ; USART0,UDR Empty Handler
rjmp RESET ;USART0_TXC ; USART0 TX Complete Handler
rjmp RESET ;ADC_CP ; ADC Conversion Complete Handler
rjmp RESET ;EE_RDY ; EEprom Ready Handler
rjmp RESET ;ANA_COMP ; Analog Comparator Handler
rjmp RESET ;TWI ; 2-Wire Serial Interface Handler
rjmp RESET ;SPM_RDY ; Store Programm Memory Ready Handler
;------------------------------------------------------------------------
;Initialisierung---------------------------------------------------------
;------------------------------------------------------------------------
reset:
; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
;************************************************* ***************************
;* Timer0 initialisierung
;************************************************* ***************************
Tim0_init:
;* Timer0-Einstellung
ldi temp,(1<<com0b1)|(0<<com0b0)|(1<<WGM01)|(1<<WGM00); FastPWM, OC0A-nc
out TCCR0A,temp ;..und ausgeben
ldi temp,(1<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00) ;Taktvorteiler /64+FastPWM..
out TCCR0B,temp ;..aktivieren
ldi temp,255
out OCR0A,temp ;Maxwert
ldi temp,0
out OCR0B,temp ;Vergleichswert
;portd 5-7 auf Ausgang schalten
ldi temp,0b11110000
out ddrd,temp
;portb 0-3 auf Ausgang schalten
ldi temp,0b00001111
out ddrb,temp
; ADC Kanal und V_ref wählen
ldi temp,(1<<REFS0)|(0<<REFS1)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0)|(1<<ADLAR)
sts ADMUX,temp
; Digitaleingabepuffer des Pins deaktivieren
ldi temp,(1<<ADC0D)
sts DIDR0,temp
; ADC aktivieren + starten, VT=32
ldi temp,(1<<ADEN)|(1<<ADSC)|(0<<ADIE)|(1<<AdPS2)|(0<<ADPS1)|(1<ADPS0)
sts ADCSRA,temp
;------------------------------------------------------------------------
;Hauptprogramm-----------------------------------------------------------
;------------------------------------------------------------------------
Main:
rcall adc_single
sts OCR0b,ADChigh
sbic pinb,pb4
sbi portb,pb0
sbis pinb,pb4
cbi portb,pb0
sbic pinb,pb5
sbi portb,pb1
sbis pinb,pb5
cbi portb,pb1
rjmp main
;------------------------------------------------------------------------
;Hauptprogramm----------------------------------------------------------E
;------------------------------------------------------------------------
;Einen Wert auslesen
ADC_single:
rcall ADC_WAIT_CLEAR
rjmp ADC_read
;Einen Einzelnen Wert auslesen
;------------------------------------------------------------------------
;ADC aktivieren
ADC_START:
ADC_WAIT_CLEAR:
; Warten bis der ADC bereit ist
lds temp,ADCSRA
sbrc temp,ADSC
rjmp ADC_Wait_Clear
ret
ADC_read:
lds ADClow, ADCL
lds ADChigh, ADCH
ret
Code-Tags verwenden ! (PicNick, Mod)
ich bitte um Hilfe seite 2 Tage habe ich nach Fehler gesucht und trotzdem ohen Erfolg.
danke
ich habe ein Programm geschrieben, mit dem will ich ein Takt über Poti erzeugen, aber leider hat es nicht funktionnier ich weiß nicht ob das an meinem Hardware liegt oder oder an dem programm: hier ist das Programm:
.include "m88def.inc"
; Anschlüße Port B
; PB0 Drehichtung
; PB1 Enable
; PD5 Takt
; PB4,PB5 sind Schalter
; Alle Anderen nicht belegt.
.def ADClow=r6
.def ADChigh=r7
.def rlow=r8
.def temp=r16 ;;temporäres Register (initialisierung, PortAusgabe)
.def temp2=r17
.def temp3=r18
;Registerzuweisung-------------------------------------------------------
;Interrupt Vektor Tabelle
rjmp RESET ; PCINT0 Handler
.org 0x003
rjmp Reset; PCINT0_7
rjmp RESET ; PCINT1 Handler
rjmp RESET ;PCINT2 ; PCINT2 Handler
rjmp RESET ;WDT ; Watchdog Timeout Handler
rjmp RESET ;TIM2_COMPA ; Timer2 CompareA Handler
rjmp RESET ;TIM2_COMPB ; Timer2 CompareB Handler
rjmp RESET ;TIM2_OVF ; Timer2 Overflow Handler
rjmp RESET ;TIM1_CAPT ; Timer1 Capture Handler
rjmp RESET ;TIM1_COMPA ; Timer1 CompareA Handler
rjmp RESET ;TIM1_COMPB ; Timer1 CompareB Handler
rjmp RESET ;TIM1_OVF ; Timer1 Overflow Handler
rjmp RESET ;TIM0_COMPA ; Timer0 CompareA Handler
rjmp RESET ;TIM0_COMPB ; Timer0 CompareB Handler
rjmp RESET ;TIM0_OVF ; Timer0 Overflow Handler
rjmp RESET ;SPI_STC ; SPI Transfer Complete Handler
rjmp RESET ;USART0_RXC ; USART0 RX Complete Handler
rjmp RESET ;USART0_UDRE ; USART0,UDR Empty Handler
rjmp RESET ;USART0_TXC ; USART0 TX Complete Handler
rjmp RESET ;ADC_CP ; ADC Conversion Complete Handler
rjmp RESET ;EE_RDY ; EEprom Ready Handler
rjmp RESET ;ANA_COMP ; Analog Comparator Handler
rjmp RESET ;TWI ; 2-Wire Serial Interface Handler
rjmp RESET ;SPM_RDY ; Store Programm Memory Ready Handler
;------------------------------------------------------------------------
;Initialisierung---------------------------------------------------------
;------------------------------------------------------------------------
reset:
; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
;************************************************* ***************************
;* Timer0 initialisierung
;************************************************* ***************************
Tim0_init:
;* Timer0-Einstellung
ldi temp,(1<<com0b1)|(0<<com0b0)|(1<<WGM01)|(1<<WGM00); FastPWM, OC0A-nc
out TCCR0A,temp ;..und ausgeben
ldi temp,(1<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00) ;Taktvorteiler /64+FastPWM..
out TCCR0B,temp ;..aktivieren
ldi temp,255
out OCR0A,temp ;Maxwert
ldi temp,0
out OCR0B,temp ;Vergleichswert
;portd 5-7 auf Ausgang schalten
ldi temp,0b11110000
out ddrd,temp
;portb 0-3 auf Ausgang schalten
ldi temp,0b00001111
out ddrb,temp
; ADC Kanal und V_ref wählen
ldi temp,(1<<REFS0)|(0<<REFS1)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0)|(1<<ADLAR)
sts ADMUX,temp
; Digitaleingabepuffer des Pins deaktivieren
ldi temp,(1<<ADC0D)
sts DIDR0,temp
; ADC aktivieren + starten, VT=32
ldi temp,(1<<ADEN)|(1<<ADSC)|(0<<ADIE)|(1<<AdPS2)|(0<<ADPS1)|(1<ADPS0)
sts ADCSRA,temp
;------------------------------------------------------------------------
;Hauptprogramm-----------------------------------------------------------
;------------------------------------------------------------------------
Main:
rcall adc_single
sts OCR0b,ADChigh
sbic pinb,pb4
sbi portb,pb0
sbis pinb,pb4
cbi portb,pb0
sbic pinb,pb5
sbi portb,pb1
sbis pinb,pb5
cbi portb,pb1
rjmp main
;------------------------------------------------------------------------
;Hauptprogramm----------------------------------------------------------E
;------------------------------------------------------------------------
;Einen Wert auslesen
ADC_single:
rcall ADC_WAIT_CLEAR
rjmp ADC_read
;Einen Einzelnen Wert auslesen
;------------------------------------------------------------------------
;ADC aktivieren
ADC_START:
ADC_WAIT_CLEAR:
; Warten bis der ADC bereit ist
lds temp,ADCSRA
sbrc temp,ADSC
rjmp ADC_Wait_Clear
ret
ADC_read:
lds ADClow, ADCL
lds ADChigh, ADCH
ret
Code-Tags verwenden ! (PicNick, Mod)
ich bitte um Hilfe seite 2 Tage habe ich nach Fehler gesucht und trotzdem ohen Erfolg.
danke