-
Sharp GP2D12
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
-
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! ;-)
-
naja das ist nicht schwer den mit bascom auszulesen @Mc-loyd
gruß
patrick
-
@ 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
-
probiers aus!
gruß
patrick
-
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 :-(
-
hallo
dein fehler liegt daran das du einfach mal den porta als input deklarieren must.
dann probiers mal so:
Code:
$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
-
Könnten wir vll die ICQ nummern austauschen dann könnten wir öfter zusammen an ein paar sachen arbeiten.....
-
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