Anfangsschwierigkeiten mit einem xmega

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • fredred schrieb:

      Bitte richtig zitieren und nicht „Momentan“ weglassen.
      Gut, aber wir befinden uns ja im Jetzt.
      In meinem Programm wird viel trigonomisch gerechnet, es gibt keine Peripherie, auf die gewartet werden muss. Nur rechnen und per interrupt für die stepper einen Takt erzeugen. Mit der Portierung schaut es schon ganz gut aus, jetzt muss ich meine steppertreiber an das 3,3V Teil anflanschen. Die Treiber haben Optokopplereingänge, mal schau'n, ob die Vorwiderstände nicht zu groß sind.


      hero schrieb:

      Warum meinst, dass die Logik verdreht ist?
      Weil in dem bascombeigepackten sampel 'xm128-TIMER-S2.bas' das steht

      BASCOM-Quellcode

      1. If Tcd0_intflags.0 = 1 Then ' if timer overflowed
      2. Tcd0_intflags.0 = 1 ' clear flag by writing 1
      3. Porte.0 = 1 ' toggle led
      4. End If
      und ich finde das seltsam. Wenn das bit=1 ist, ist die if-Abfrage gültig und dann wird genau dieses bit wieder =1 gesetzt. Programmierst du sowas auch?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • hero schrieb:

      Nun kommt das einzig seltsame bei allen AVRs:
      naja, das langt für mich, von einer seltsamen (verdrehten) Logik zu schreiben. Sowas macht die Sache doch nicht einfacher!
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Ok, ich hab's geschafft, mein Elektrosandkasten läuft mit dem xmega.
      Mein Problem mit dem timer ist gelöst, für den mega168 (20MHz) schaut der code so aus

      BASCOM-Quellcode

      1. Config Timer0 = Timer , Prescale = 256 , Clear_timer = 1
      2. On Compare0a Steppertakt_isr
      3. Enable Compare0a
      4. Start Timer0
      5. Compare0a = 20
      6. Enable Interrupts

      und für den xmega mit 32MHz dann eben so

      BASCOM-Quellcode

      1. Config Tcc0 = Normal , Prescale = 1024
      2. Tcc0_per = 10 'Periode einstellen 0,00032 sec
      3. Config Priority = Static , Vector = Application , Lo = Enabled
      4. On Tcc0_ovf Steppertakt_isr
      5. Enable Tcc0_ovf , Lo
      6. Enable Interrupts
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Jetzt möchte ich mein vorhandenes Programm von einem mega168 auf den xmega32 bringen.
      Dies war mein Anlass für Antwort.

      Michael schrieb:

      Das verstehe ich nicht.
      Kannst du das bitte nochmal genauer erklären?
      Nochmal
      Mit ungeeignet meine ich die Nutzung der vielen Config und Lib die ja nach meinem erachten das Plus++ bei Bascom sind.
      Tschoeatsch „altes“ Programm würde auch ohne Probleme auf mega 32, 64 und 128 funktionieren aber halt nicht mehr mit den Xmega’s. Da es Momentan in Bascom kein Konverter gibt der die bekannten Grundregistereinstellungen für Xmega übersetzt. Könnte aber morgen schon einen geben oder eben nicht.
      Hatte auch darauf hingewiesen das die Xmega’s eine völlig neue Generation sind.

      fredred schrieb:

      Leider ist die Xmega-Reihe zu den AVR-Prozessoren der Mega- oder Tiny-Serien nicht kompatibel (viel komplizierter, anderer Aufbau der IO-Baugruppen, der Interrupts, Funktionen etc.).
      Und wie man sieht muss man schon anders an die Schache heran gehen.

      tschoeatsch schrieb:

      Mein Problem mit dem timer ist gelöst,
      Die alten Sandalen passen nicht mehr. Sportschuhe müssen es sein, dass Ziel ist das gleiche aber der Weg ist anders ob die Strecke schneller wird entscheidet die Anwendung nun besteht ja die Möglichkeit für mehr Rechenpower.
      Mit freundlichen Grüßen
    • "Hatte auch darauf hingewiesen das die Xmega’s eine völlig neue Generation sind."
      Nicht nötig. Neu seit mehr als 10 ?( Jahren.

      Die timer sind schon bei den "alten" AVRs komplex und die config timer Aktionen sind nicht unbedingt klar. Es lohnt sich immer, das manual zu rate zu ziehen, aber das kostet Zeit (die Einstellungen sind auf mindestens drei Register verteilt).
      Bei Xmegas hat man das geradliniger gemacht. Ich setze die Register immer direkt, und ohne Zurateziehen des Manuals geht's meistens nicht.

      Leider funktionieren tatsächlich manche Libs beim Xmega nicht, sollte eigentlich immer darauf hingewiesen werden. Schmerzliches Beispiel: glcd240-7.lib..... Mein teures Display liegt immer. Noch herum.....
    • elektron schrieb:

      Leider funktionieren tatsächlich manche Libs beim Xmega nicht, sollte eigentlich immer darauf hingewiesen werden. Schmerzliches Beispiel: glcd240-7.lib..... Mein teures Display liegt immer. Noch herum.....

      Hallo,

      dies wollte ich vermitteln, mit den Xmega’s sollte man sich wieder mit den einzelnen Register vertraut machen fängt hier schon beim TC-Modul an. Mit den Mega’s, hat Bascom für uns Amateure, all dies abgenommen. Vielleicht auch bald wieder.
      Als alter Assembler bin ich schon begeistert was die Käfer alles machen können, wenn man denen es auch richtig sagt.
      Sehr kleines Beispiel mit TC:
      True 16 bit operation
      Double buffered timer period setting
      4 (2) compare or capture channels per timer
      - 4 channels on each Timer 0
      - 2 channels on each Timer 1
      - Double buffered
      2 bit operation with 32 bit input capture by timer cascading
      Event counter
      Timer overflow and error interrupts (and events)
      Input capture interrupts (and events)
      Bei den Xmega Controllern sind jedem I/O-Port mehrere Timer/Counter-Module zugeordnet. Diese können verwendet werden um einen Interrupt auszulösen oder um die Ausgänge der I/O-Pins anzusteuern.
      Jeweils der Timer0 an jedem Port verfügt über 4 compare or capture channels. Der Timer1 verfügt über 2 compare or capture channels. Generell sind die Ausgänge von Timer0 mit den Pins 0-3 innerhalb eines Portx verbunden, während die Ausgänge von Timer1 mit den Pins 4 und 5 verbunden sind.

      Nun weis ich warum @tschoeatsch nicht das B Register sondern den "Normal Mode" ausgewählt hat.
      Für einen normalen Event- Timer passt es aber wehe wenn die Eventroutine TCC0_OVF_vect von ein anderem Portbit angesprochen wird.
      Somit muss man schon bei Projekterstellung ganz genau wissen welches Pin mit welchem Register eine Einheit bildet.
      Wenn nun ein Bascom- Programmierer dies nicht beachtet kann es schon Frust geben.
      Könnte noch viele Beispiele liefern, warum der Xmega für viele Amateure (Wie ich es auch bin)eine Nummer zu groß ist.
      Aber für Profis für die, die Registerprogrammierung(ASM), ein leichtes ist, ist diese Generation ein super Spielplatz.

      Ich bleibe bei meine Atmega und proge diese mit Bascom und nehme an, dass ich nicht mal 25 % aller Features ausgeschöpft habe.
      Ja die trigonomischen Berechnungen benötigen bedingt durch Div schon viele Takte aber in eine Task wo sogar noch ein "lahmer" Stepper angesprochen werden muss sehe ich kaum eine Verbesserung ob Systemtakt 8 oder 32 MHz ist. a_56_df238249

      Mit freundlichen Grüßen
    • fredred schrieb:

      tschoeatsch schrieb:

      Weil gerade die libs im Gespräch sind, ist die 'xmega.lib' mit $lib einzubinden, oder geschied das automatisch?
      Eine Lib muss grundsätzlich eingebunden werden.
      Echt? Kenn ich nicht so, die dcf77-lib hab' ich nie extra mit $lib eingebunden.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Möchte mich als Amateur vom Thema Xmega- Programmierung verabschieden.
      Ist was für Experten auf diesem Gebiet.
      Glaube die Admin’s haben schon reagiert. Bekomme seit geraumer Zeit keine Benachrichtigung
      per E- Mail mehr.
      Tschüß
    • Bei den timern vom xmega kann ich jetzt eine Periode einstellen. Wenn ich einen Überlaufinterrupt mit dieser Periode auslösen will, muss ich die ja nur 1x angeben. Ist das jetzt vergleichbar mit compare oder timerload? Fängt der timer bei 0 an und läuft nach der Periode über, oder startet der timer bei max-Wert - Periode und läuft beim max-Wert über?
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch schrieb:

      Fängt der timer bei 0 an und läuft nach der Periode über, oder startet der timer bei max-Wert - Periode und läuft beim max-Wert über?
      Ich denke, das kannst Du Dir aussuchen, siehe: (Kann hier leider nicht mehr posten).
      atmel.com/images/Atmel-8331-8-…oller-XMEGA-AU_Manual.pdf
      Kap. 14.12.4 (mindestens)
      "The counter register (CNT), period registers with buffer (PER and PERBUF), and compare and capture registers with
      buffers (CCx and CCxBUF) are 16-bit registers. All buffer register have a buffer valid (BV) flag that indicates when the
      buffer contains a new value.
      During normal operation, the counter value is continuously compared to zero and the period (PER) value to determine
      whether the counter has reached TOP or BOTTOM.
      The counter value is also compared to the CCx registers. These comparisons can be used to generate interrupt
      requests, request DMA transactions or generate events for the event system. The waveform generator modes use these
      comparisons to set the waveform period or pulse width.