-
        

Ergebnis 1 bis 2 von 2

Thema: Avr At90can 128

  1. #1
    Neuer Benutzer
    Registriert seit
    05.10.2006
    Ort
    hamburg
    Beiträge
    2

    Avr At90can 128

    Anzeige

    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.

  2. #2
    Neuer Benutzer
    Registriert seit
    05.10.2006
    Ort
    hamburg
    Beiträge
    2
    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
  •