-
        

Ergebnis 1 bis 9 von 9

Thema: Sharp GP2D12

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    31
    Beiträge
    140

    Sharp GP2D12

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2004
    Ort
    Gelsenkirchen
    Beiträge
    110
    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!

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    naja das ist nicht schwer den mit Bascom auszulesen @Mc-loyd


    gruß
    patrick

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2004
    Ort
    Gelsenkirchen
    Beiträge
    110
    @ 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

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    probiers aus!


    gruß
    patrick

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2004
    Ort
    Gelsenkirchen
    Beiträge
    110
    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

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    29
    Beiträge
    1.099
    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

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    31
    Beiträge
    140
    Könnten wir vll die ICQ nummern austauschen dann könnten wir öfter zusammen an ein paar sachen arbeiten.....

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2005
    Alter
    31
    Beiträge
    140
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •