PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene Funktionen



Richi 007
02.06.2007, 09:51
Ich schreib mir gerade 'ne Datei, in der ich manche Orginal-Funktionen verbessere.
Bsp.:


void _SerWrite(char pszText)
{
SerWrite(pszText, strlen(pszText) + 1);
}

Sternthaler
02.06.2007, 13:46
Hallo Richi 007,
das ist ganz OK, aber dann kannst du mit dieser Funktion nur noch 0-terminierte Daten senden. Also nur noch Strings, und nicht mehr einzelne Bytes aus numerischen Variablen. (Strings sind in C immer mit einem Byte abgeschlossen, in dem eine 0 drin steht.)
Sonst ist deine Funktion natürlich brauchbar. Nur weiter so.

Richi 007
02.06.2007, 19:21
Danke :?
Ich hab noch ne Frage:
Wie kann PC2 bzw. PC3 als Digi-Ausgang verwenden?

damaltor
02.06.2007, 19:32
zuerst schreibst du in das datenrichtungsregister eine eins, dann in das ausgaberegister den pegel. im klartext:

DDRC |= (1<<2); //durch diese anweisungen werden die beidon ports als digitalausgänge deklariert
DDRC |= (1<<3);


jetzt kannst du so einen pegel anlegen:

PORTC |= (1<<N); //am pin N wird HIGH-pegel angelegt (N ersetzen durch 2 oder 3)

PORTC &= ~(1<<N); //am pin N wird ein LOW-pegel angelegt.



achtung leute, ich habe keinen asuro zum testen, bitte darum um kurze kontrolle bevor irgend was raucht... für die freaks: das datenrichtungsregister wird mit oder beschreiben (|=) damit die anderen bits nicht verändert werden. das highsetzen ebenfalls. beim low setzen muss man umdenken: erst wird eine 1 geschoben, dann invertiert und mit UND gesetzt (&=) damit die andern bits ebenfalls gleich bleiben. kann das so stimmen?

Richi 007
02.06.2007, 19:53
Aha, weil ich hab mir ne Erwieterungsplatine mit 2 Leds bestückt und will die jetzt an- und ausschalten.
Und nen Schalter auslesen, der steckt an Port PD2 und PD3.

Notiz: Nicht dass ihr denkt ich bin dumm oder will mir alles machen lassen! Ich weiss nur noch nicht wie's geht.

Sternthaler
02.06.2007, 20:50
Hier denkt niemand, dass jemand dumm ist.
Wie heisst es so schön: Es gibt keine dummen Fragen, sondern nur dumme Antworten.


achtung leute, ... kurze kontrolle
Ist so OK.

damaltor
03.06.2007, 13:16
an einem AUSGANG kann man aber keinen pegel eines schalters messen...

Richi 007
04.06.2007, 10:10
Ja,aber wie schalt ich die auf Eingang?

Richi 007
04.06.2007, 11:31
Ach ja, an welche Ports muss ich 2 Schrittmotoren anschliesen?

Lunarman
04.06.2007, 14:15
Dafür bräuchtest du (glaub ich) noch n paar Ports. Soweit ich weiß musst du den Step irgendwie an nen Motortreiber anschließen, und dann geht auch nur einer. Also kurz gesagt - funktioniert aufm ASURO nich wirklich.

Richi 007
04.06.2007, 18:44
Aha, ich hab da so ne Site:
http://home.att.net/~wzmicro/l298.html

damaltor
06.06.2007, 08:33
also schrittmotoren brauchen viele ports, das ist nicht so einfach. aber mit einem motortreiber (www.robotikhardware.de) sollte das klappen. wenn du auf odometrie (und damit auch auf die backleds) verzichtest, und die motorenports noch nutzt, konnte es aber auch so gehen.

Richi 007
02.07.2007, 17:03
Ah, die brauch ich eh nicht(Back-Leds)

Bääääär
05.07.2007, 07:19
Ich hab die Sache mit Ports als Aus- / Eingang schalten und Pegel setzten usw. erst mithilfe der Asurobücher verstanden. Kann ich dir wirklich empfehlen. Weil wenn du den Code jetzt kopierst und ihn dann doch nicht verstehst (ich will dir nichts unterstellen) bringt es ja auch nicht viel. Soll nicht heißen, dass ich dich für dumm halte, nur, falls du es nicht verstehst, kann ich dir nur ans Herz legen, nachzufragen. Du wirst zwar mit copy & paste dein Programm zum Laufen bringen, aber nachher hat man mehr davon, wenn man alles bis ins Detail verstanden hat.

Auf die Odometrie würde ich nicht verzichten, es sei denn, deine Schrittmotoren sollen die Asuromotoren ersetzen. Dann brauchst du die natürlich nicht mehr.

Bääääär

damaltor
06.07.2007, 13:59
die bücher sind wirklich nicht schlecht... da kommt dann vor allen dingen großes verständnis!

Richi 007
15.07.2007, 19:23
Die Schrittmotoren sollen die von ASURO ersetzen

damaltor
16.07.2007, 18:32
das haben wir uns schon gedacht...

mausi_mick
26.07.2007, 07:02
Funktion encoder.c ist super, sollte aber noch verbessert werden um Returnwert (int) oder (char), wenn die Räder sich nicht drehen( z.B. Hindernis, Verschmutzung) oder die Drehung der Scheiben nicht erkannt wird. (Verschmuzung der Encoder-Scheiben etc). Vielleicht kann man auch die Rückgabe über die Input_werte ( distance , speed ) machen (geht vielleicht mit Call by Reference ?). in denen man die tatsächlichen Zählwerte links und rechts bei Stillstand übergibt.

Im aufrufenden Programm könnte dann über die Returnwerte z.B die Fahrtrichtung geändert werden oder die Motoren abgeschaltet werden.

damaltor
26.07.2007, 20:28
call by reference währe eine idee, aber einfacher ist denke ich, dass der return wert glwich dem wert ist, bei dem keine drehung mehr festgestellt wird. wenn also 400 ticks gefahren werden soll, wird ja bei jedem gemessenen tick eins abgezogen. wenn dann nach 150 ticks keine drehung mehr erkannt wird, wird 150 zurückgegeben - dann kann man ganz gut finden an welcher stelle es hakt und evtl sogar, was die beste aktion wäre die durchgeführt werden soll.

mausi_mick
27.07.2007, 03:42
Hallo damaltor, Dank für die schnelle Antwort. hab mal gleich mit der Go-Funktion in encoder experimentiert, anstelle
void Go (...) rufe ich sie mit
int Go (auf) . Bei festfahren (bei mir gehts wohl ab 200ms) bekomme
ich in dem int-Wert zurück, ob beide Räder stehen (=3) links steht(=1)
oder rechts (2). Das aufrufende Programm kann dann reagieren.

Der Testcode sieht bei mir so aus:[/code]