Forum: Mikrocontroller und Digitale Elektronik Funktion von Bascom auf C portiert


von drakesoft (Gast)


Lesenswert?

Hallo zusammen steige zur zeit von Bascom auf den gcc compilier um. Da 
ich den SRF02 (Ultraschall Sensor) ansprechen möchte, es aber nur Code 
für Bascom gibt habe ich versucht die funktion in C zu schreiben. Und 
wollte euch fragen ob das so richtig ist. Als software uart wurde das 
hier 
http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=133&item_type=project 
benutzt.

Hier das portierte:
1
int messung( char ID) {
2
    unsigned char highbyte, lowbyte;
3
4
    // ID + Befehl zum messen senden
5
    sputchar( ID );
6
    sputchar( 84 );
7
    
8
    // Antwort
9
    while( !kbhit() );
10
    highbyte = sgetchar();
11
    while( !kbhit() );
12
    lowbyte = sgetchar();
13
14
    return ( (highbyte << 8) | lowbyte );
15
}

Hier den Bascom code:
1
Function Srf02_entfernung(byval Slaveid As Byte) As Integer
2
3
Local Lob As Byte
4
5
Local Hib As Byte
6
7
8
9
   Print #1 , Chr(slaveid) ; Chr(84);                       'Messvorgang in cm starten
10
11
   Inputbin #2 , Hib , Lob                                  'Warte auf Ergebnis
12
13
   Srf02_entfernung = Makeint(lob , Hib)
14
15
End Function

Grüße

drakesoft

von Wilhelm F. (Gast)


Lesenswert?

@drakesoft:

Ohne dir jetzt eine konkrete Hilfe zum Beispiel zu geben:

Im Grunde mußt du Basic und C beherrschen. Funktionen sollten sich auch 
separat zerlegen und portieren lassen.

Ich selbst, portiere gerade einen Assemblercode nach C. Das ist nicht 
weniger einfach. Manchmal komme ich nicht umhin, für eine Funktion den 
Umweg über Flußdiagramme oder Struktogramme zu nehmen. Also, aus der 
Assemblerfunktion, ein Struktogramm erstellen, und daraus dann den 
C-Code.

Natürlich, ist das Arbeit im Detail.

von Rainer U. (r-u)


Lesenswert?

Das Bascom-Beispiel sieht nach Hardware-UART aus, oder? Wie groß ist 
Dein Empfangspuffer? Warum wartet Die C-Funktion auf eine Taste (kbhit?)

Naja Du wirst es wissen.

also sende erstmal an den PC/Terminalprogramm, guck, daß dann die 
gleichen 2 Zeichen rauskommen mit beiden Funktionen. Wenn das 
funktioniert, sende 2 Zeichen mit dem PC(Tastatur) zurück und guck ob 
sie richtig ankommen. Du wirst so sicher viele Deiner Probleme finden.

von Leichtgewicht (Gast)


Lesenswert?

Die while !kbhit zeilen sind endlos.

von Rainer U. (r-u)


Lesenswert?

Nicht wenn Du richtig doll draufhaust! :-)

kbpress? kbtouch? kbstreichel?

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

das past schon,

wenn kbhit einen returnwert liefert welcher aus einer Interruptroutine 
resultiert.

von drakesoft (Gast)


Lesenswert?

Ich dachte kbhit läuft so lange bis ein zeichen gesendet wird und ich es 
dann mit sgetchar auslesen kann.
Und in Bascom ist es auch ein Soft UART und Inputbin wartet auch so 
lange bis ein Zeichen gesendet wird.

von Karl H. (kbuchegg)


Lesenswert?

drakesoft schrieb:
> Ich dachte kbhit läuft so lange bis ein zeichen gesendet wird und ich es
> dann mit sgetchar auslesen kann.

kbhit macht das, was du in die Funktion hineinprogrammierst.
Genauso wie sgetchar

Beide Funktionen gibt es nicht in C. Du musst sie selber programmieren.


Vielleicht doch erst mal ins avr-gcc-Tutorial schauen und nachlesen, wie 
man mit er UART umgeht?
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#UART

Edit: Kann natürlich auch sein, dass diese Funktionen bereits jemand in 
dem AVR-Freaks Paket für dich implementiert hat. Aber ich melde mich da 
jetzt nicht an, um mir das von dir verlinkte Paket anzusehen.

von drakesoft (Gast)


Lesenswert?

Wie oben schon gesagt ich benutze den schon programmierten Soft Uart. 
Hier noch mal der Link: 
http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=133&item_type=project

Compilieren kann ich das ganze ohne fehler, was aber nicht heißt das 
logic fehler drin sind.

von drakesoft (Gast)


Angehängte Dateien:

Lesenswert?

oder hier der DL

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.