ACI Interrupt verhält sich willkürlich (BLDC BEMF mit Komparator)

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Die muss man aktiv zuschalten. By default sind die weg und die pins auf Eingang geschaltet (also hochohmig und ohne Pegel).
      Intern gibt es nur pullups.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • AIN1 ist der negative Input des Komparators und liegt auf Pin 11, das ist auch ADC2.

      ImDatenblatt steht:
      "Analog Comparator Multiplexed Input
      When the Analog to Digital Converter (ADC) is configurated as single ended input channel, it is possible to select any of the ADC7..0 pins to replace the negative input to the Analog Compara- tor."
    • Der Tipp von @Mitch64 ist auch gut und noch eine zu prüfende Sache...

      Hier der Ausschnitt der Doku zum Eingang des Komperators.


      NACHTRAG: Das ACO Bit wird gesetzt, wenn AIN0 positiver ist als AIN1 (oder der jeweils gewählte ADC-Eingang).
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.

      The post was edited 1 time, last by monkye: Nachtrag ().

    • OK, hab zwar gerade einen FET geschossen, den muss ich schnell tauschen, dann geht's aber weiter.

      Dann schreibe ich einfach mal $crystal = 8000000
      Aber kann ich den nicht irgendwie durch 8 teilen um auf 1 MHz zu kommen?

      Das mit dem HW- bzw. SW-stack ist für mich absolute Dunkelheit. Wieviel hab ich zur Verfügung und wie kann ich berechnen, wieviel ich brauche?
    • Bastlbeda wrote:

      AIN1 ist der negative Input des Komparators und liegt auf Pin 11, das ist auch ADC2.

      ImDatenblatt steht:
      "Analog Comparator Multiplexed Input
      When the Analog to Digital Converter (ADC) is configurated as single ended input channel, it is possible to select any of the ADC7..0 pins to replace the negative input to the Analog Compara- tor."
      Du schaltest doch auf den muxer um. Und wenn wenn dann kein admux angegeben ist würde ich annehmen, die mux-bit stehen auf 0 und dann wäre der adc0 ausgewählt. Der ist bei dir nicht beschaltet und fängt allerlei ein. Dadurch wird vielleicht ein int ausgelöst und dein trigger ging (damals) auf =1 und somit war das if-Zeugs true und der Eingang wurde durch admux endlich umgeschaltet.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Schau mal in deinem 'code-explorer' links unter info. Da stehen stackwerte. Die musst du allerdings noch korrigieren, um dann ausreichende Werte zu bekommen. Schau mal hier avrhelp.mcselec.com/view_code_explorer.htm

      The calculated stack settings are based on the program call tree and local variables. This is just a tool to give you an idea about stack usage. Not taken into account is the stack required by the assembler routines. This means that you need to add a certain amount to the calculated values. When your code uses interrupts you need to increase the calculated $HWSTACK by 32. Otherwise increase it by 16. The $FRAMESIZE should have a minimum value of 24. Add a value of 16 to $SWSTACK.
      Applications using AVR-DOS should use a minimum of 128 for all stacks.
      A future version will also take the assembler code into account.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Der code-Explorer sagt
      $Framesize = 24
      $HWStack = 4, da du aber Interrupt verwendest mach 32 oben drauf.
      $SWStack = 0, da kannst du 16 oben drauf haun.
      Das gilt für den augenblicklichem Softwarestand

      Du kannst aber erst mal alle auf 32 setzen, das reicht dann erst mal ne Weile.

      Wenn du unbedingt Systemtakt 1MHz brauchst, dann schau mal in den Fusebits nach.
      Da gibts meist eine Einstellung "Clock divide by 8", das muss dann aktiviert werden.

      Dann must du im Code bei Crystal aber auch die 1MHz angeben.

      Bascom muss wissen, mit welchem Takt das System läuft und z.B. Waitms zu berechnen und einiges mehr.
    • Also, ich lasse ihn durch Zwangskommutierung anlaufen, danach läuft er noch etwas nach. und eine Phase wird als aktivePhase in einem Bit gemerkt.

      Jetzt wird der ACI enablet.


      In der Hauptschleife frage ich das Triggerbit und das Aktivaphase-Bit ab.
      Wenn das Triggerbit 1 ist und die aktive Phase 1 ist, dann wird kommutiert (Phase1 = 0, Phase0 = 1) und das Aktivaphase-Bit auf 0 gesetzt.
      elseif
      Wenn das Triggerbit 1 ist und die aktive Phase 0 ist, dann wird anders herum kommutiert (Phase0 = 0, Phase1 = 1) und das Aktivephase-Bit auf 1 gesetzt