-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: PWM-Ausgang im Hintergrund?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    37
    Beiträge
    265

    PWM-Ausgang im Hintergrund?

    Moin moin!

    Muss mich mal kurz online freuen, hab heute mein STK500 bekommen, von Farnell Elektronik.

    *FREU*

    Rein optisch kriegt man schon mal was fuers (viele) Geld, bei mir lagen ausserdem zwei AVRs mit drin (8515 und ATMega16), find ich richtig nett.

    Aber ich haette da noch mal ein paar Fragen zu AVRs generell: Im Datenblatt steht ja immer, wie schnell man die Dinger betreiben kann, also was fuer Quarze man anschliessen kann. Aber viele AVRs haben ja auch einen internen Timer. Hat dieser interne Timer immer 1 MHz oder gibts auch schnellere? Zum Beispiel hab ich einen ATMega8-16PC. Steht die 16 da fuer die 16 MHz, die er laut Datenblatt maximal kann oder dafuer, dass er mit dem internen Quartz 16 MHz macht?

    Als Anwendung sollen auf meinem AVR mehrere digitale Regelungen laufen, einmal PI und zweimal P. Diese drei Funktionen werden per Timer-Interrupt aufgerufen, um eine konstante Abtastzeit zu haben. Messgroessen kommen als PWM-Signale an, dazu wuerde ich die beiden Interrupt-pins und den Input-Capture-Pin nehmen.
    Die Ausgaenge der drei Regler und zwei weitere Ausgangssignale solle ebenfalls PWM sein, aber wie kriege ich das nun hin? Die Ausgaenge sollen eine Refreshrate von mindestens 50 Hz haben und recht genau sein. Wenn ich den AVR mit 16 MHz betreibe, waere ein ASM-Befehl ja etwa 0,06 us lang, also sind Aufloesungen im Mikrosekundenbereich theroetisch moeglich. Aber wie lasse ich die Ausgaenge "parallel" zur sonstigen Programmbearbeitung laufen? Ich kann ja schlecht fuer jeden Ausgang eine Funktion mit Timer-Interrupt schreiben, die dann jeweils einen Puls der gewuenschten Laenge ausgibt, oder? Weil es doch nur zwei Prescaler fuer den Timer gibt...
    Ausserdem soll noch ein Schrittmotor angesteuert werden, zwar nicht schnell, aber auch so "im Hintergrund", dass die Regelungen ungestoert weiterlaufen.
    Hat jemand ne schlaue Idee?
    Nils

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Hat dieser interne Timer immer 1 MHz oder gibts auch schnellere?
    Die Geschwindigkeit des interen Timers hängt von der Taktfrequenz deines AVRs ab. Das heißt wenn du ihn mit 1 Mhz tacktest du die Vorteiler der Timer abschaltest, dann laufen sie auch mit 1 Mhz, schneller als die Taktfrequenz kannst du es nur mit einem externen Takt schaffen ( T0 und T1 Eingänge für Timer0 bzw. Timer1 )

    Für die PWM Ausgänge kannst du ja die PWM Ausgänge der Timer benutzen ( OSC1A, OSC1B, OSC2 oder OSC0 ). Dann braucht man sich sonst nicht darum zu kümmern, kann den Timer allerdings auch nicht anderweitig verwenden.

    Zu den anderen Probleme müsst ich mir erst was überlegen, das war jetzt das was mir so spontan eingefallen ist

    MfG Kjion

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    37
    Beiträge
    265
    Moin,

    Das mit dem Prescaler hab ich schon verstanden, glaube ich. Ich meinte wirklich nur die (ungeteilte) Frequenz des internen Quartzes. Weil ich naemlich ueberlege, ob ich ueberhaupt einen externen Quartz an meinen AVR anschliessen muss. Ich will, dass er mit den 16 MHz laeuft, dass also 16 mio Anweisungen pro Sekunde ausgefuehrt werden. Wenn schon die interne Frequenz 16 MHz waere, braeuchte ich ja keinen Quartz mehr, oder?

    Zu den anderen Sachen bin ich auch noch am Knobeln, ich glaube nicht, dass der Chip selber genuegend PWM-Ausgaenge hat. Die werd ich mir wohl selber basteln muessen.

    Weiss eigentlich jemand, wie man im AVR-Studio Programme mit C entwickeln kann? Beim Einrichten eines neuen Projekts kann man ja auswaehlen, womit man entwickeln will, in der Liste steht aber standardmaessig nur "AVR-Assembler". Kann man auch irgendwie den AVR-GCC einbinden?

    Nils

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Weiss eigentlich jemand, wie man im AVR-Studio Programme mit C entwickeln kann? Beim Einrichten eines neuen Projekts kann man ja auswaehlen, womit man entwickeln will, in der Liste steht aber standardmaessig nur "AVR-Assembler". Kann man auch irgendwie den AVR-GCC einbinden?
    Kann man nur bei dem "alten" 3.56er. Aber warum eigentlich ??
    http://www.kreatives-chaos.com/index.php?seite=avrgcc

    Weil ich naemlich ueberlege, ob ich ueberhaupt einen externen Quartz an meinen AVR anschliessen muss. Ich will, dass er mit den 16 MHz laeuft, dass also 16 mio Anweisungen pro Sekunde ausgefuehrt werden. Wenn schon die interne Frequenz 16 MHz waere, braeuchte ich ja keinen Quartz mehr, oder?
    Aber woher soll die kommen ?? Bei den Megas kann man zwar einen internen Oscillator aktivieren, allerdings maximal bis 8 Mhz.
    Also brauchts du auf jeden Fall einen externen Quarz wenn du den AVR mit 16 Mhz betreiben willst. Das hat dann übrigens erstmal gar nix mit dem Timern zu tun...

    MfG Kjion

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    37
    Beiträge
    265
    Kann man nur bei dem "alten" 3.56er. Aber warum eigentlich ??
    Na, weil sich's in C besser programmieren laesst als in ASM und das AVR-Studio ne IDE ist, die Sache mit den Makefiles und so funktioniert zwar, aber seeeehr unkomfortabel

    Dass der Oszillator nicht gleich dem Timer ist, weiss ich ja. Mir gings nur um den Quartz.
    Bei den Megas kann man zwar einen internen Oscillator aktivieren, allerdings maximal bis 8 Mhz.
    Und wie aktiviere ich einen internen Oszillator mit 8 MHz? Ich nehme mal stark an, dass in jedem AVR genau ein interner Oszillator ist, mit einer festen Frequenz. Woher weiss ich denn, welche das ist? Ich haette ja gedacht, dass zum Beispiel die 16 in der Bezeichnung ATMega8-16PC das angibt, aber wenn du sagtst, dass kein AVR intern 16 MHz hat, kann das ja nicht stimmen. Gibts irgendwo ne Liste, welcher AVR welche interne Frequenz hat?

    Mir kommt es halt komisch vor, dass ich bei einem Mikrocontroller einen Quartz anschliessen soll. Fuer mich ist ein interner Oszillator der Normalzustand, nicht ein extern angeschlossener Quartz...

    Nils

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    [quote]Na, weil sich's in C besser programmieren laesst als in ASM /quote]
    War mir schon klar, ich programmiere ja auch in C

    und das AVR-Studio ne IDE ist, die Sache mit den Makefiles und so funktioniert zwar, aber seeeehr unkomfortabel
    Ähh, ich glaube du hast da was falsch verstanden. Ins AVR-Studio kannst du nur den Compiler einbinden, das heißt du brauchst genauso die Makefiles wie vorher ... von daher ist es egal ob man jetzt das PN oder AVRStudio benutzt, vom Komfort ist es ähnlich

    Und wie aktiviere ich einen internen Oszillator mit 8 MHz? Ich nehme mal stark an, dass in jedem AVR genau ein interner Oszillator ist, mit einer festen Frequenz. Woher weiss ich denn, welche das ist?
    Den internen Oscillator kannst du per Fusebytes aktivieren ( CKSEL0-3 ). Bei jedem Mega kann man entweder 1,2,4 oder 8 Mhz auswählen!

    Ich haette ja gedacht, dass zum Beispiel die 16 in der Bezeichnung ATMega8-16PC das angibt, aber wenn du sagtst, dass kein AVR intern 16 MHz hat, kann das ja nicht stimmen.
    Die 16 Mhz geben an mit welcher Taktrate der AVR betrieben werden kann und Atmel noch garantiert das er ordnungsgemäß läuft. Man sollte ihn auch eigentlich nicht höher Takten, möglich ist es schon...

    Mir kommt es halt komisch vor, dass ich bei einem Mikrocontroller einen Quartz anschliessen soll. Fuer mich ist ein interner Oszillator der Normalzustand, nicht ein extern angeschlossener Quartz...
    Wieso das ?? Bei mir ists eher umgekehrt Jedenfalls bei AVRs...

    MfG Kjion

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    37
    Beiträge
    265
    Den internen Oscillator kannst du per Fusebytes aktivieren ( CKSEL0-3 ). Bei jedem Mega kann man entweder 1,2,4 oder 8 Mhz auswählen!
    Ahaaaa. Das war genau das, was ich wissen wollte.

    Und du meinst, man kann das AVR-Studio nicht dazu bewegen, sich wie ne ordentliche IDE zu benehmen? Heutzutage gibts doch kaum noch ne Programmiersprache, wo sich ein normaler User mit makefiles rumschlagen muss. Visual Studio, JCreator, C++ Builder, selbst bei Borland wird sowas in der Projektverwaltung automatisch gehandhabt. Mit "Makefile" assoziiere ich eher so die Anfaenge der Programmiererei. Oder Programmieren unter UNIX, was ich noch nie lustig fand. Mangels IDE halt ;-)

    Ich weiss, ich bin verwoehnt...

  8. #8
    micromann
    Gast

    tolle ide mit debuggen und so

    der post is zwar schon älter, und ich bin ein absoluter mc newbie (hab' noch nich mal einen). bis jetzt bin ich noch dabei alles mit software zu simulieren!

    Ich binutzte als ide dazu AVRSide und AVRStudio 4.09 und zu kompilieren benutzte ich winavr. wenn man winavr einfach in das standartverzeichniss installiert (was ich ja nicht so mag) klappt alles auf anhieb. Mann kann dann sogar den softwaredebugger aus AVR studio benutzen und zwar folgendermaßen:

    neues projekt erstellen
    in projekt/options/compiler das häkchen bei AVRStudio debugger files machen
    project/build (damit werden auf diese seltsamen debugfiles für avrstudio generiert)
    und zu guter letzt muss man noch die .cof datei die nun im projektverzeichnis liegt in AVR studio öffnen.

    jippie, hoffe habe jemandem geholfen.


    grüß Benjamin

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.07.2004
    Ort
    Mammendorf
    Alter
    59
    Beiträge
    1.058
    Anfänge der Programmiererei? Ich habe an der TU noch mit Lochkarten in Fortran programmiert. Debuggen hieß ein Papier nehmen und neben den einzelnen Code Zeilen von Hand nachrechnen. dabei Achten das man auch die richtigen Spalten verwendet hat. Das war die Mainframe Umgebung. Im Personal Computer, den PC und Gates gab es noch nicht, war man selig als man basic und Forth programmiern konnte und zum Speichern eine Art Musikkassette hatte als Band Speicher! Bin heute 47. Kommilitonen hatten noch den Luxus von hex-Programmierung kennengelernt, gegen über einer Schalterleiste für jedes Bit eines Wortes!

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    37
    Beiträge
    265
    Genau das meine ich ja
    Aber da sind wir doch hoffentlich drüber weg... Ich will mich jedenfalls beim Programmieren von Mikrocontrollern auf mein geschriebenes Programm konzentrieren und nicht Zeugs machen, das - wie schon gesagt - eine moderne Programmiersprache locker selbständig können müsste. Ich mag ja Knobelaufgaben, aber nur solche, die ich mir selber aussuche, keine, die mir veraltete Software stellt
    Nils

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •