Forum: Mikrocontroller und Digitale Elektronik Ultraschall Asuromodul und Bascom


von Felix K. (listerstorm)


Angehängte Dateien:

Lesenswert?

Hallo liebe Mikrocontroller Gemeinde,

ich habe ein Problem udn hoffe das mir einer von euch freundlichen 
Profis helfen kann. Ok ich mache es kurz. Ich habe einen Roboter gebaut 
der super funktioniert, aber nun sollte er per Ultraschall erweitert 
werden. Da ich lieber selbst baue als fertig zu kaufen habe ich das 
Ultraschallmodul für den Asuro nachgebaut. Leider funktioniert es nicht. 
Leider sind alle Codes für dieses Modul in C geschrieben und ich komme 
mit C einfach nicht zurecht und arbeite mit Bascom und habe also 
versucht ein Ultraschallprogramm für das SRF05 US Modul so zu ändern das 
es mit dem Asuromodul läuft.

Tja dem ist aber nicht so. Ich habe leider kein Ozzilloskop zum messen, 
aber ich gehe von aus das ich keine Fehler gemacht habe und das dass 
Modul selber funktioniert. Hehe ja ich weiss das gilt noch zu beweisen, 
aber das Modul funktioniert bei vielen anderen leuten also ist die 
konstruktion generell ok.

Daher würde ich mich sehr freuen wenn Ihr euch mal die folgenen Sachen 
angucken könntet und nach Fehler oder Verbesserungen gucken könntet. 
Suchfunktion und Google und so weiter konnten mir bis jetzt nicht 
helfen.

Also mein Vermutung ist das, dass Bascomprogramm so nicht mit dem Modul 
funktioniert und angepasst werden muss. Z.B. verwendet das Modul den Pin 
D6 (hab ich selber nur gelesen) zum entladen und zum verhindern von 
Ultraschallkurzschlüssen oder so. Sowie scheint es das, dass 
Bascomprogram auf eine steigene flanke setzt während die C Version auf 
eine fallende flanke setzt? Ich muss sagen so lange progge ich auch 
nicht und kann mich bei sowas schnell irren.

Ich benutze aktuell zum testen einen Atmega16 mit externen 4mhz Crystal 
und verwende die selben Pins wie beim Asuro und dem Programm in C 
(OC2,ADC3,PD6).

Ich bedanke mich schon mal bei allen die mir helfen möchten und sollten 
Informationen fehlen oder Fragen aufkommen versuche ich diese zu 
beantworten.

Gruß Lister

PS: Hier alle Informationen:

Schaltplan vom Asuro Ultraschallmodul siehe Anhang (der IC soll ein 
TS912IN sein).

Original C Code:
1
#include "asuro.h"
2
3
void LocalInit(void)
4
{
5
  // Change Oscillator-frequency of Timer 2
6
  // to 40kHz, no toggling of IO-pin:
7
  TCCR2 = (1 << WGM21) | (1 << CS20);
8
  OCR2 = 0x64;            // 40kHz @8MHz crystal
9
  ADCSRA = 0x00;          // ADC off
10
  // Analog comparator:
11
  ACSR = 0x02;            // Generate interrupt on falling edge
12
  ADMUX = 0x03;            // Multiplexer for comparator to
13
                          // ADC pin 3
14
  SFIOR |= (1 << ACME);    // Enable muliplexing of comparator
15
  DDRD &= ~(1 << 6);      // Port D Pin 6 is input!
16
}
17
18
19
void Ping(unsigned char length)
20
{
21
  count72kHz = 0;
22
  TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
23
                          // Toggling of IO-Pin on
24
  
25
  // generate the Chirp
26
  while(count72kHz < length) {
27
    OCR2 = 0x64 + length / 2 - count72kHz;
28
  }
29
  
30
  TCCR2 = (1 << WGM21) | (1 << CS20);    // Toggling of IO-Pin off
31
  OCR2 = 0x64;                          // set frequency to 40kHz
32
}
33
34
35
int main(void)
36
{
37
  int pos, i;
38
  int posmarker;
39
  Init();
40
  LocalInit();
41
  while(TRUE) {
42
    posmarker = 0;
43
    Ping(20);
44
    for(pos = 0; pos < 100; pos++) {
45
      Sleep(10);
46
      if((ACSR & (1 << ACI)) != 0) {
47
        if(posmarker == 0) { posmarker = pos; }
48
      }
49
      ACSR |= (1 << ACI);
50
    }
51
    if(posmarker > 10) {
52
      StatusLED(GREEN);
53
      MotorDir(FWD, FWD);
54
      MotorSpeed(200, 200);
55
    }
56
    else {
57
      StatusLED(RED);
58
      MotorDir(FWD, RWD);
59
      MotorSpeed(0, 200);
60
      for(i = 0; i<100; i++) { Sleep(200); }
61
    }
62
  }
63
  
64
  return 0;
65
}

Hier das Bascomprogramm für das SRF05 von mir für das Asuromodul 
umgebaut (der original Code ist von RN Wissen):
1
$regfile = "m16def.dat"
2
$crystal = 4000000
3
$baud = 4800
4
5
6
Dim Zeitmessung As Word
7
Dim Entfernung As Word
8
9
10
Config Portd.7 = Output
11
Config Pina.3 = Input
12
Config Pind.6 = Input
13
14
15
Do
16
    Portd.7 = 0                                             'Port Low
17
    Pulseout Portd , 7 , 40                                 '10uS Impuls bei 4 MHz senden  (10*4=40)
18
    Pulsein Zeitmessung , Pina , 3 , 1                      ' Den Puls wieder empfangen
19
    Zeitmessung = Zeitmessung * 10                          'mal 10 da Pulsein in 10uS Einheiten Ergebnis ermittelt
20
    Entfernung = Zeitmessung / 58                           'Umrechnen in Zentimeter
21
    Print "Entfernung: " ; Entfernung ; " cm"
22
    Wait 1
23
Loop
24
End

: Gesperrt durch User
von Krapao (Gast)


Lesenswert?

Funktioniert das Modul mit dem Programm, das aus dem C-Code erstellt 
wurde? Wenn nein, ist Fehlersuchen angesagt statt Umschreiben in BASCOM.

Zum Fehlersuchen gehört das Schaltbild.

In deinem Bascom-Programm ist der Trigger-Impuls 4xlänger als nötig (was 
aber nicht problematisch sein sollte).

Und der Echo-Impuls wird anders als im C-Code nicht mit dem AC-gemessen 
sondern in 10µs Schritten mit der PULSEIN-Funktion von BASCOM.
1
$regfile = "m16def.dat"
2
$crystal = 4000000
3
$baud = 4800
4
5
Dim Posmarker As Word
6
7
Config Portd.7 = Output
8
Config Pina.3 = Input
9
Config Pind.6 = Input
10
11
Do
12
  Portd.7 = 0                      'Port Low
13
  Pulseout Portd , 7 , 10          '10uS Impuls über PORTD.7 senden
14
  Pulsein Posmarker , Pina , 3 , 1 'an PINA.3 Echo in 10µs Ticks messen
15
  If Posmarker > 10 Then           'min. 100µs d.h. gültiges Echo?
16
    ' Bestimmte Subroutinen und Konstanten siehe:
17
    ' ASURO-Grundprogramm für BASCOM
18
    ' (C) Wolfgang Schmid / Feb. 2009
19
    ' visit: www.wiesolator.de
20
    Call StatusLED (ColGruen)          'StatusLED(GREEN);
21
    Call MotorDir (DriveFwd, DriveFwd) 'MotorDir(FWD, FWD);
22
    Call MotorSpeed (200, 200)         'MotorSpeed(200, 200);
23
  Else
24
    Call StatusLED (ColRot)            'StatusLED(RED);
25
    Call MotorDir (DriveFwd, DriveRwd) 'MotorDir(FWD, RWD);
26
    Call MotorSpeed (0, 200)           'MotorSpeed(0, 200);
27
    Waitus 20000                   'for(i = 0; i<100; i++) { Sleep(200); }
28
  End If
29
Loop
30
End

Asuro + Bascom: 
http://www.wiesolator.de/index.php?area=Robotik&topic=Asuro

SRF05
http://www.robot-electronics.co.uk/htm/srf05tech.htm

SRF05 + BASCOM
http://www.rn-wissen.de/index.php/Ultraschall_SRF05_an_RN-MiniControl

von Felix K. (listerstorm)


Lesenswert?

Erstmal danke für deine Antwort. Ja kann gut sein das der 4 mal länger 
ist. Ich hatte das vom Programm für den SRF05 einfach übernommen in der 
Hoffnung was der kann kann der andere auch hehe.

Also der Schaltplan ist astrein, der funktioniert ind er Form in 
tausenden von Asuros. Höhstens bei der Ausführung könnte es fehler 
gegeben haben. Daher habe ich Lötstellen nach gelötet und zwischenräume 
zur sicherheit sauber gekratzt. Alle teile sind auch an der richtigen 
Stelle. Aber das ich evtl. was über sehen habe oder ein teil defekt ist 
kann ich natürlich nie ausschliessen hehe

Was ich zumindest stümperhaft testen konnte war, dass was aus dem AVR 
kommt auch beim US Sender ankommt. Hab einfach eine Led angeklemmt die 
leuchtet dann ich sag mal Rhytmisch am AVR und am US Sender. Daher denke 
ich das zumindest der Sender funktioniert. Ich habe aber auch kein 
Haustier was US hören könnte hehe.

Gruß Lister

von Felix K. (listerstorm)


Lesenswert?

Ok hier ein Update:

Also ganz falsch kanns nicht sein, weil ich habe Gestern aus 
verzweiflung einfach den Code nochmal neu per Hand geschrieben. Dabei 
hatte ich die Umrechnung vergessen mit rein zuschreiben. Auf einmal 
konnte ich ne Zahl lesen. Immer eine 1 und ganz selten ne 3 immer wenn 
ich zwischen 5 bis 20 cm ein Hindernis aufbaue. Damit sei bewiesen das 
Ultraschall gesendet und empfangen wird. Ok ist immer noch murks, aber 
es ist ein Hoffnungsschimmer. Bei mir macht es den Eindruck als ob das 
Singal sehr schwach ist. Da frage ich mich ist der Sender schwach oder 
der Empfänger nicht empfindlich genug ist? Aber das ist nur geraten.

Ich habe auch eine Zwischenfrage. Ich habe Gestern alles durchgemessen 
was ich konnte. Beim dual Opamp TS912IN liegt überall die selbe Spannung 
an bis auf natürlich VCC und komischer Weise an Pin 5. An Pin5 liegt die 
Spannung immer 0,01 Volt niedriger als an den anderen Pins. Ist das so 
korrekt?

Alle Widerstände sind an der richtigen Stelle und nachgemessen wurden. 
Der BC547 funktioniert auch genauso wie die Diode. Keine kalten 
Lötstellen gefunden und auch keine ungewollten Lötbrücken.

Ja was ich noch gesehn habe der Pullupwiderstand R1 für den Empfänger 
ist auf meiner Platine recht weit von der Empfängerkapsel, aber das sehe 
ich nicht kritisch.

Bin für weitere Idee offen.

Gruß Lister

von Krapao (Gast)


Lesenswert?

> Da ich lieber selbst baue als fertig zu kaufen habe ich das
> Ultraschallmodul für den Asuro nachgebaut.

Oh das hatte ich überlesen und bin erst jetzt drauf gestossen, weil du 
so viel vom Untersuchen der Hardware schreibst.

Du hast jetzt die berühmten drei Probleme auf einmal.

1) Unzuverlässige Hardware.
2) Unzuverlässige Software.
3) Keine Tools zum Debuggen.

Man kann

a) sich zuverlässige Hardware beschaffen. U.U. gibt es Nachbauer, die 
einen Aufbau in ihrem System testen oder dir ein bekannt 
funktionierendes System überlassen.

b) sich zuverlässige Software beschaffen. U.U. gibt es Nachbauer, die 
einem ein bereits kompiliertes C-Programm für den Asuro per Email 
senden.

c) vielleicht findet sich in der Nähe jemand, der bei den Messungen 
hilft. Das kann ein selbstbauender Funkamateur(club) oder ein 
E-Technik-Labor an der Uni sein oder ein Hackerspace oder einfach nur 
ein anderer User aus dem/den Foren.

von Felix K. (listerstorm)


Lesenswert?

Hmmm ja das war mir auch schon klar :P Bevor ich nen E-Technik Labor 
stürme kauf ich lieber für ca. 17 Euro nen fertiges Modul. Daher werde 
ich wohl das Problem so lösen müssen. Daher erneut die Frage ob das 
normal ist das an Pin5 des TS912IN 0,01 Volt weniger anliegt als an den 
anderen.

PS: die anderen Vorschläge haben entweder keine Ergebnisse gebracht oder 
nicht machbar. Dennoch vielen dank für deine Beiträge.

von Patrice (Gast)


Lesenswert?

Ich suche Eine Fertiger gebaute  Ultraschall Sensor für die Asuro !!  wo 
kann das kaufen oder hat jemand schon das selbst gebaut et will jetzt 
wider das verkaufen.
PS: Ich habe schon 2 mal die Bausatz selbst gekauft und zusammen gebaut 
aber Funktion nicht deswegen will ich mich  ein fertiger kaufen.

Hier ist meine e Mail     patrice_alai@yahoo.com

von Karl H. (kbuchegg)


Lesenswert?

BItte betreibe keine Leichenfledederrei.
Wenn du eine Frage hast, dann mach einen eigenen Thread dazu auf, denn 
deine Frage hat nichts mit dem Thema des Threads zu tun.,

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.