PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM-Ausgang im Hintergrund?



Minifriese
23.03.2004, 22:17
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

Kjion
24.03.2004, 11:29
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

Minifriese
24.03.2004, 11:44
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

Kjion
24.03.2004, 13:08
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

Minifriese
24.03.2004, 13:44
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

Kjion
24.03.2004, 14:21
Na, weil sich's in C besser programmieren laesst als in ASM /quote]
War mir schon klar, ich programmiere ja auch in C ;)

[quote]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

Minifriese
24.03.2004, 19:41
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...

micromann
20.05.2004, 16:23
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

Hellmut
06.07.2004, 23:55
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!

Minifriese
07.07.2004, 12:04
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

Hellmut
07.07.2004, 13:55
Legitim, für manche ist das Ergebnis das Ziel, für andere der Weg, und wieder andere haben Rahmenbedingungen die extreme Anstrengungen rechtfertigen. Ich hab früher als Laborleiter bei National Semiconductor mit Alcatel an einer Lösung für Minitels gearbeitet. Die Entwicklungsmannschaft hat ein Jahresgehalt als Bonifikation erhalten für jeden USD den Sie bei der Lösung einsparten. Es war unglaublich interessant was für Herausforderungen sich stellen wenn man Kosten in einem extrem preiskritischen Massenmarkt Produkt zu berücksichtigen hat. Ich hatte auch Projekte bei MBB für Simulatoren der aller obersten Kategorie, wo Kosten keine Rolle und Leistung allein entscheidend war. Viel einfacher und eigentlich auch langweiliger!

MfG

Hellmut