-
-
Avr At90can 128
hallo
ich habe eine Frage
ich habe eine mikrocontroller At90can128 ->16MHz und 4magnitische (HallSensoren (Drehzahlgeber von Phillips KMI/15).ich habe ein AutoTruck,die kann bis 100 kmh fahren.ich muss von jedes Rad die Geschwindigkeit ermittlen .und an PC durch can bus schicken.
ich habe das probleme durch Externe Interrupt(d.h 4 Externe Interrupt) gelöst.so,wenn ich signal kriege ,wird immer der variable Counter erhöht.
damit die Geschwindigkeit rechne ,brauche ich eine Zeit für jedes Rad ,dann habe ich für jedes Rad eine Timer (ingesamt 4 Timer )gemacht ,nach eine Sekunde wird eine speed gerechnet und dann die werte in hash_tabelle gespeichert ,warum habe ich Hashtabelle gemacht weil ich kann die Zeitstempel als index von tabelle und die wert von jedes Rade als Value speichern ,wenn ich merke z.b bei zeitstmpel 1s ,dass alle speed da sind ,dann schicke zum Pc durch Can bus
Inforamtion:
ich kann pro 1s fast 200 Impuls kriegen beim 100Kmh(pro sensor).
ist diese lösung schlau? oder kann man etwas besser machen
probleme
1)
ich will Gleitkommazahlen eigentlich nicht benutzen(float) koste zeit für mich
void speed0(){
uint8_t impulseCnt=0;
//uint8_t distance = 0;
uint8_t zeit_stempel=0;
uint8_t status =0;
float drehzahl=0;
float distance =0;
float speed=0;
cli();
impulseCnt= IMPULS_Sen0;//impulse Count speichern
zeit_stempel=TIMER0_Stempel;
IMPULS_Sen0=0;
sei();
drehzahl=impulseCnt/4;// (impulseCnt/4 löscher);
distance=drehzahl*UMFANG_RAD; //57cm
speed= distance*3,6;
}
hat jemanden Eine Idee ,wie mann am beste lösen kann ,ich werde dankbar sein .ich habe gehort Fixkomma ,aber das sagt mir gar nicht zu.
-
hallo
ich habe eine Frage
ich habe eine mikrocontroller At90can128 ->16MHz und 4magnitische (HallSensoren (Drehzahlgeber von Phillips KMI/15).ich habe ein AutoTruck,die kann bis 100 kmh fahren.ich muss von jedes Rad die Geschwindigkeit ermittlen .und an PC durch can bus schicken.
ich habe das probleme durch Externe Interrupt(d.h 4 Externe Interrupt) gelöst.so,wenn ich signal kriege ,wird immer der variable Counter erhöht.
damit die Geschwindigkeit rechne ,brauche ich eine Zeit für jedes Rad ,dann habe ich für jedes Rad eine Timer (ingesamt 4 Timer )gemacht ,nach eine Sekunde wird eine speed gerechnet und dann die werte in hash_tabelle gespeichert ,warum habe ich Hashtabelle gemacht weil ich kann die Zeitstempel als index von tabelle und die wert von jedes Rade als Value speichern ,wenn ich merke z.b bei zeitstmpel 1s ,dass alle speed da sind ,dann schicke zum Pc durch Can bus
Inforamtion:
ich kann pro 1s fast 200 Impuls kriegen beim 100Kmh(pro sensor).
ist diese lösung schlau? oder kann man etwas besser machen
probleme
1)
ich will Gleitkommazahlen eigentlich nicht benutzen(float) koste zeit für mich
void speed0(){
uint8_t impulseCnt=0;
//uint8_t distance = 0;
uint8_t zeit_stempel=0;
uint8_t status =0;
float drehzahl=0;
float distance =0;
float speed=0;
cli();
impulseCnt= IMPULS_Sen0;//impulse Count speichern
zeit_stempel=TIMER0_Stempel;
IMPULS_Sen0=0;
sei();
drehzahl=impulseCnt/4;// (impulseCnt/4 löscher);
distance=drehzahl*UMFANG_RAD; //57cm
speed= distance*3,6;
}
hat jemanden Eine Idee ,wie mann am beste lösen kann ,ich werde dankbar sein .ich habe gehort Fixkomma ,aber das sagt mir gar nicht zu.
kann mir jemanden helfen ?
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen