PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sharp GP2D12



Larzarus
02.04.2006, 10:24
Hi ich habe hier ein Programm geschrieben für das RN Control 1.4.
Es soll ständig die Werte des Analogen Port a messen und auf die LED´s ausgeben.

Jetzt ist die Frage ob das so laufen wird.
Später soll dann an den Analog Port A ein Sharp GP2D12 dran .
mit der Vektoren tabelle bin ich mir nicht so sicher ob das passt.

Wäre sehr nett wenn ein Profi hier verbesserungen vornehmen würden ^^


NOLIST
.INCLUDE "m32def.inc"
.LIST


jmp RESET ; Reset Handler
;jmp EXT_INT0 ; IRQ0 Handler
;jmp EXT_INT1 ; IRQ1 Handler
;jmp EXT_INT2 ; IRQ2 Handler
;jmp TIM2_COMP ; Timer2 Compare Handler
;jmp TIM2_OVF ; Timer2 Overflow Handler
;jmp TIM1_CAPT ; Timer1 Capture Handler
;jmp TIM1_COMPA ; Timer1 CompareA Handler
;jmp TIM1_COMPB ; Timer1 CompareB Handler
;jmp TIM1_OVF ; Timer1 Overflow Handler
;jmp TIM0_COMP ; Timer0 Compare Handler
;jmp TIM0_OVF ; Timer0 Overflow Handler
;jmp SPI_STC ; SPI Transfer Complete Handler
;reti USART_RXC ; USART RX Complete Handler
;reti USART_UDRE ; UDR Empty Handler
;jmp USART_TXC ; USART TX Complete Handler
jmp OnADC ; ADC Conversion Complete Handler
;jmp EE_RDY ; EEPROM Ready Handler
;jmp ANA_COMP ; Analog Comparator Handler
;jmp TWI ; Two-wire Serial Interface Handler
;jmp SPM_RDY ; Store Program Memory Ready Handler


RESET:

;---------------------------------------------------------
ldi r16,high(RAMEND)
out SPH,r16 ;init Stackpointer low
ldi r16,low(RAMEND)
out SPL,r16 ;init Stackpointer high
;---------------------------------------------------------

;Kanlauswahl wo gemessen wird

ldi r16,0x00 ;ADC Channel 0
out ADMUX, r16 ;ADC Channel 0
;-----------------------------------------------------------

;Einstellung ADC und Messung

ldi r16, 0b11010111 ; hier werden die obigen informationen übergeben vorteil 32
out ADCSRA , r16

;ADEN|ADSC|ADFR|ADIF|ADIE|ADSP2|ADSP1|ADSP0

;ADEN ADC Enable
;ADSC Start conversion
;ADFR Free Run
;ADIF Interupt Flag
;Interupt Enable
;ADSP 0..2 Vorteiler bei mir = 128 alle drei auf 111

mainloop: WDR

rjmp mainloop

OnADC:
cli ;interrupts sperren
in r26,ADCL ;Low Teil auslesen
in r27,ADCH ;High Teil auslesen
reti
;-------------------------------------
;Von 10Bit auflösung nach 8 Bit auflösung Konvertieren
asr r27 ;schiebe BIT 0 des "High TEILs" ins c FLAG
ror r26 ;schiebe alle bits nach rechts C-Flag in Bit 7
asr r27 ;schiebe BIT 0 des "High TEILs" ins c FLAG
ror r26 ;schiebe alle bits nach rechts C-Flag in Bit 7

ldi r16, 0xFF ;0xFF ins Arbeitsregister r16 laden
out DDRC, r16 ;Inhalt von r16 ins IO-Register DDRC ausgeben

mov r25, r26


out PORTC, r25 ; hier sind acht LED´s dran


sbi ADCSRA,6
sei
reti

Mc_Loyd
14.04.2006, 20:39
Warum probierst du es nicht einfach mal aus???

Ich hab auch ein RN-Control und versuche gerade genau denselben Sensor anzusteuern, aber mit Bascom...

Wenn du es geschafft hast, setzt mal bitte den Code online.
Ich werde es andernfalls genau so tun! ;-)

patti16
14.04.2006, 23:00
naja das ist nicht schwer den mit bascom auszulesen @Mc-loyd


gruß
patrick

Mc_Loyd
15.04.2006, 09:11
@ Patti:

Ja, ich glaube dir das auch...

Meinst du dieser Code wird auf dem RN-Control funkitonieren?



$regfile = "m32def.dat"
$crystal = 16000000



Config Portc = Output
Portc = 0

Dim W As Word

Enable Interrupts

Start Adc

Do
W = Getadc(0)
If W > 0 Then Portc.7 = 1 Else Portc.7 = 0
If W > 128 Then Portc.6 = 1 Else Portc.6 = 0
If W > 256 Then Portc.5 = 1 Else Portc.5 = 0
If W > 384 Then Portc.4 = 1 Else Portc.4 = 0
If W > 512 Then Portc.3 = 1 Else Portc.3 = 0
If W > 640 Then Portc.2 = 1 Else Portc.2 = 0
If W > 768 Then Portc.1 = 1 Else Portc.1 = 0
If W > 896 Then Portc.0 = 1 Else Portc.0 = 0

Waitms 10
Loop
End

patti16
15.04.2006, 10:32
probiers aus!


gruß
patrick

Mc_Loyd
15.04.2006, 10:58
Hab ich, es funzt immernoch nicht *schäm*

Irgendwie will er nicht.

Ich beschreib´s nochmal ganz genau, vielleicht weiß dann jemand was los ist.

Ich habe den Sensor an PortA ganz rechts aussen reingsteckt und jegliche Programmcodes ausprobiert die ich gefunden habe - aber nichts tut sich!

Ich messe am Ports zwar eine Spannung, diese kann ich aber auch etwas schacher an den anderen AD-Ports messen.
Hoffe echt, es ist ein Software-Problem, weil sonst wird´s sicher teuer :-(

patti16
15.04.2006, 11:40
hallo

dein fehler liegt daran das du einfach mal den porta als input deklarieren must.

dann probiers mal so:





$regfile = "m32def.dat"
$crystal = 16000000


Config Porta = Input
Config Portc = Output


Dim a As Word

Enable Interrupts

Start Adc

Do
a = Getadc(0)
If a > 0 Then Portc.7 = 1 Else Portc.7 = 0
If a > 128 Then Portc.6 = 1 Else Portc.6 = 0
If a > 256 Then Portc.5 = 1 Else Portc.5 = 0
If a > 384 Then Portc.4 = 1 Else Portc.4 = 0
If a > 512 Then Portc.3 = 1 Else Portc.3 = 0
If a > 640 Then Portc.2 = 1 Else Portc.2 = 0
If a > 768 Then Portc.1 = 1 Else Portc.1 = 0
If a > 896 Then Portc.0 = 1 Else Portc.0 = 0

Waitms 10
Loop
End

Larzarus
18.04.2006, 12:51
Könnten wir vll die ICQ nummern austauschen dann könnten wir öfter zusammen an ein paar sachen arbeiten.....

Larzarus
19.04.2006, 09:07
Wäre klasse wenn jemand der ein RN Board hat mit mir zusammen arbeiten würde ich habe vor ein paar Mc anwendungen zu realisieren.

greetz Larzarus