uups, die Smilies sollen Achten sein.
Druckbare Version
uups, die Smilies sollen Achten sein.
Hallo blenderkid
Poste doch mal dein komplettes Programm (möglichst aufs nötigste reduziert, möglichst kopiert und nicht nachgeschrieben wie "mSpleep(200); und in code-Tags), so dass man es im Umfeld betrachten kann. Erster Tipp: falsche (oder keine) Kanal-Nr. an RC() übergeben.
Man kann einen Eintrag hier im Forum auch editieren. Um die lästigen ;)-Smilies zu unterdrücken, kann man unten das Häckchen bei "Smilies in diesem Beitrag deaktivieren" reinmachen.
Gruß
mic
Ok hier also der Code aufs nötigste reduziert
Code:uint8_t RC(uint8_t kanal)
{
if (kanal == 1)
{
while(!(PINA&8));
timer=0;
while(PINA&8);
return (timer);
}
if (kanal == 2)
{
while(!(PINA&4));
timer=0;
while(PINA&4);
return (timer);
}
return(0);
}
void moveCommand(behaviour_command_t * cmd)
{
RCcount=RC(1);
RCcount2=RC(2);
writeInteger(RCcount,10);
writeChar('\n');
}
int16_t main(void)
{
initRP6Control();
DDRA &= ~ADC3;
DDRA &= ~ADC2;
PORTA &= ~12;
startStopwatch6();
startStopwatch7();
writeInteger(timer,10);
mSleep(200);
writeInteger(timer,10);
while(true)
{
moveCommand(0);
}
return 0;
}
Hier kommt immer 0 heraus. :-(
mfg blenderkid
vielleicht wegen dem return(0); ?
Hallo blenderkid
Was ich nun halt immer noch nicht weiß: Wie ist bei deinem Programm die Variable "timer" deklariert.
Egal, für einen schnellen Test kannst du folgendes ändern:
erstes timer=0; in timer=11;
zweites timer=0; in timer=22;
und das return(0); in return(33);
Bei 11 oder 22 stimmt etwas nicht mit dem timer, dann mal timer durch delay_timer ersetzen(beide sind gleichschnell 0,1ms!). 33 wird wohl nicht auftreten.
Gruß
mic
Braucht er nicht zu deklarieren - ist im RP6Lib drin alsZitat:
Wie ist bei deinem Programm die Variable "timer" deklariert.
volatile uint16_t timer;
@Blenderkid: Du hast aber auch an ADC0 oder ADC1 was angeschlossen? Eventuell mal den anderen Kanal verwenden falls Du da was verwechselt hast beim anschließen?
Poste mal nach den Modifikationen die mic vorgeschlagen hat die komplette Ausgabe des Programms!
Und zusätzlich würde ich einfach an vielen Stellen (z.B. Beginn/Ende einer Funktion, in den If Bedingungen etc. ) mal probeweise
writeString_P("#1#\n");
...
writeString_P("#2#\n");
...
usw. hinschreiben immer mit anderen Nummern natürlich. Dann weisst Du genau an welche Stellen Dein Programm hinspringt und wo es hakt.
Evtl. noch ein mSleep(100) in die Hauptschleife reinmachen damit die Ausgaben nicht zu schnell erfolgen.
Sobald das Programm dann funktioniert, kannst Du die ganzen Ausgaben wieder entfernen.
MfG,
SlyD
EDIT:
PINA & 8 ist natürlich E_INT1.
PINA & 4 ist allerdings nicht ADC1...
Schreib das am besten immer so: PINA & ADC0, PINA & E_INT1, PINC & SCL etc. dann weiss man auch direkt welcher Pin gemeint ist.
Diese ganzen Definitionen findest Du in der Datei RP6RobotBase.h
diese includes benutze ich.
#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_I2CMasterLib.h"
sonst deklariere ich timer nicht.
Bei dem Test kommt immer 11 heraus.
Als ich delay_timer benutzt hab, sagte mir der Compiler: RP6Control_10_Move2.c:467: error: 'delay_timer' undeclared (first use in this function)
MfG
blenderkid
>>Diese ganzen Definitionen findest Du in der Datei RP6RobotBase.h<<
ich benutze aber den M32.
also RP6ControlLib.h
Ach - sorry - hab ich nicht mehr dran gedacht.
Natürlich ist es auch dafür sinnvoll die entsprechenden Definitionen aus "RP6Control.h" zu verwenden, also z.B. PINA & ADC2 usw. - dann weiss man direkt wo was angeschlossen ist.
Es wird oben von Verion 1.3 erzählt. In der Dateien aus dem Link oben:
http://www.arexx.com/rp6/downloads/R...s_20071016.zip
Steht immer version 1.1