PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro US an RN-Control



luma
19.06.2006, 17:54
Hio.
Ich hab ein ziemlich dringendes Problem. Und zwar versuche ich gerade das US Modul vom Asuro mit einem RN-Control zu verbinden und es will einfach nicht tun. Ich schreib schnell wie ich das gemacht habe und ich wäre wirklich jedem sehr dankbar, der mir einen Tipp geben könnte, was falsch ist.
Also, ich schließe den Pin ADC3 der Erweiterungsplatine an den Pin AIN1 am RN-Control (also invertierter Eingang des Komparators) und den Pin PD6 (AIN0) der Erweiterungsplatine an AIN0 am RN-Control an (jeweils direkt den Draht an den Pin). Nun schließe ich noch den Pin OC2 (PD3) der Erweiterungsplatine an PD7 (OC2) an das RN-Control an. Mein Programm sieht nun so aus:



#include "asuro.h"
#include "uart.h"

void LocalInit(void)
{
// Change Oscillator-frequency of Timer 2
// to 40kHz, no toggling of IO-pin:
TCCR2 |= (1 << WGM21) | (1 << CS20);
OCR2 = 0x64; // 40kHz @8MHz crystal
ADCSRA = 0x00; // ADC off
// Analog comparator:
ACSR = 0x02; // Generate interrupt on falling edge

SFIOR |= (1 << ACME); // Enable muliplexing of comparator
DDRB &= ~((1 << PB2) | (1 << PB3)); // Port B Pin 2 and 3 is input
}


void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 |= (1 << WGM21) | (1 << COM20) | (1 << CS20); // Toggling of IO-Pin on

// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}

TCCR2 |= (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64;
}


int main(void)
{
// LEDs aus vom RN-Control
DDRC = 0xFF;

int pos, i;
int posmarker;
uart_init();

LocalInit();

while(TRUE) {
posmarker = 0;
Ping(20);
for(pos = 0; pos < 100; pos++) {
Sleep(10);
if((ACSR & (1 << ACI)) != 0) {
if(posmarker == 0) { posmarker = pos; }
}
ACSR |= (1 << ACI);
}
if(posmarker < 10) {
PORTC &= ~((1<<PC1));
PORTC |= (1<<PC0);
}
else {
PORTC &= ~((1<<PC0));
PORTC |= (1<<PC1);
}

uart_putc(posmarker);
}

return 0;
}
[/b]

posmarker ist immer 0. An den Eingängen des Komparators tut sich auch nix. Da zeigt mein billig Multimeter immer 2,47 V an...

Was ist da falsch :(? Hab ich irgendwas falsch verbunden? Ich hab das strenge Gefühl das der Timer nicht tut, keine Ahnung, kann das aber nicht messen, weil ich kein Oszi hab.

Ich wär für einen Hinweis wirklich sehr sehr dankbar.

Gruß
Lutz

luma
19.06.2006, 18:09
Hio.
Wenn ich klatsche, dann kann ich mit dem US mein Klatschen hören. Anscheinend tut der nicht chripen...

Arexx-Henk
19.06.2006, 18:34
Hallo,

Tip1: kauf dir ein Oszi.;-)
Tip2: kauf dir ein Oszi.;-)
Tip3: kauf dir ein Oszi.;-)

Tip4: ist ADMUX okay?

Tip5: ich weiss nicht warum aber die "while(count72kHz < length)" da konnte was schief gehen wenn in die Mitte/wahrend von/die (count72kHz < length) ein interrupt entsteht. Hat etwas mit 'atomic' oder sonstiges zu tun. Daruber gibts ein artikel in RN-Wissen.

Die Timer init scheint mir weiter okay.

Gruss

Henk

luma
19.06.2006, 18:47
Hio.
Was meinst du mit ADMUX? Ich hab den negativen Eingang des Komparators einfach bei AIN1.

Ich versteh die Welt nicht mehr. Am Asuro tut das Teil und am RN-Control nicht...
Vielleicht fehlt ja ein elektr. Bauteil irgendwie? Ein Widerstand ist da im Schaltplan eingezeichnet bei ADC3, der bei mir ja "widerstandslos" in AIN1 gestöpselt wird.

Gruß
Lutz


Edit: Wenn ich das US-Modul am Ausro hab, dann reagiert das nicht auf Klatschen...

Arexx-Henk
19.06.2006, 20:05
Ja hallo,

da hab ich mich geirrt, die Admux hat ja nichts damit zu tun.

ich kenne nur Asuro nicht die RN-Control.

Du sprichtst:

>Nun schließe ich noch den Pin OC2 (PD3)

ich nehme an OC2 ist PD3.

Ist port PD3 auch wie Ausgang programmiert?
Denn ohne dies geht's nicht (nicht im Asuro Atmega8L)

Gruss

Henk