TSL201 und AtMega

(Firma: Privat) #2220475
Lesenswert?

Moin,

Hat schon mal jemand den TSL201 (64 X 1 LINEAR SENSOR ARRAY) mit einem 
AtMega angesteuert?

Ich habe einen AtMega88 der mit dem internen Taktgenerator arbeitet 
(ohne /8 Prescaler).

Den Takt des TSL201 erzeuge ich mit dem TIMER2 im Phase-Correct PWM und 
den SI Impuls direkt:
1
    TCCR2A = (0 << COM2A0) | (3 << COM2B0) | ((wgm & 0x03) << WGM20);
2
    TCCR2B = (((wgm >> 2) & 0x01) << WGM22) | (2 << CS20);
3
    TCNT2 = 0;
4
    OCR2A = 64;
5
    OCR2B = 32;
6
    TIMSK2 = 0;     /* Disable all interrupts or (1 << OCIE2B)?? */
7
    DDRD |= (1 << 3) | (1 << 2);
8

9
        /* Clear TOV1 */
10
        TIFR2 |= (1 << TOV2);
11
        /* Wait for TOV1 */
12
        while ((TIFR2 & (1 << TOV2)) == 0)
13
            ;
14
        /* set PD2 */
15
        PORTD |= (1 << 2);
16
        /* Wait for TCNT2 to decrease */
17
        do {
18
            tcnt2 = TCNT2;
19
        } while (TCNT2 >= tcnt2);
20
        /* clear PD2 */
21
        PORTD &= ~(1 << 2);
Den ADC habe ich so initialisiert:
1
    ADMUX = (0 << REFS0) | (1 << ADLAR) | (0 << MUX0);
2
    USART_send_hex(ADMUX); USART_Transmit('\n');
3
    ADCSRA = (1 << ADEN) | (0 << ADSC) | (0 << ADATE) | (1 << ADIF) | (0 << ADIE) | (6 << ADPS0);
4
    USART_send_hex(ADCSRA); USART_Transmit('\n');
5
    DIDR0 = (1 << ADC0D);
Dann starte ich den ADC:
1
        for (i = 0; i < 64; i++)
2
        {
3
            /* Clear OCF2B */
4
            TIFR2 |= (1 << OCF2B);
5
            /* Wait for OCF2B */
6
            while ((TIFR2 & (1 << OCF2B)) == 0)
7
                ;
8
            /* start conversion */
9
            ADCSRA |= (1 << ADSC) | (1 << ADIF);
10
            PORTD |= (1 << 4);
11
            /* wait for conversion to finish */
12
            while ((ADCSRA & (1 << ADIF)) == 0)
13
                ;
14
            PORTD &= ~(1 << 4);
15
            /* read converted value into array */
16
            array[i] = ADCH;
17
        }
Seltsamerweise sehe ich keinen Unterschied in den Daten, egal ob der 
Sensor angestrahlt oder im Dunkeln ist!
(Firma: Privat) #2221506
Lesenswert?

Problem gelöst:

Ich hatte zwei Durchläufe programmiert: einmal um den Sensor (durch 
Auslesen) zu löschen und einmal um den Sensor dann definiert auszulesen.
Natürlich muß man beim zweiten Durchlauf erneut ein SI geben, sonst 
sieht man nix ;-)

Jetzt erkenne ich, wenn ich den Sensor teilweise abdecke: nur ein Teil 
ist ff, der andere ist kleiner!

Josef

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren