PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit AT90S2313?



10.12.2004, 15:24
Hallo!
Kann ich mit der Schaltung auf http://s-huehn.de/elektronik/avr-prog/avr-test1.gif (werde allerdings den 10 poligen ISP nehmen)
zwei PWM Signale für eine Motorsteuerung mit dem L293D (enable1 und enable2) bekommen? Oder geht das mit dem 2313 nicht?

Wäre nett wenn jemand irgendwie eine gute Seite oder sowas dazu weiß, ich habe bisher noch nicht so viel mit AVR programmiert, nur ein paar Grundlagen. Zu PWM habe ich bis jetzt noch gar keine Ahnung! :frown:

Florian
10.12.2004, 15:39
Hi!
Guckst du hier: http://www.atmel.com/dyn/resources/prod_documents/DOC0839.PDF

Da steht ein PWM-Ausgang, OC1!

10.12.2004, 16:29
Alles klar, danke erstmal!

Weiß denn jemand noch ne gute Seite, auf der steht, wie man sowas in Assembler programmiert?

Florian
10.12.2004, 17:15
Also ich bin ja hier, soweit ich weiß, bekannt als Asm-Freak! *lol*
Ich würde Dir den AT-Mega8 oder sogar 16 empfehlen, damit hast Du gleich noch Ausbaumöglichkeiten für später!
Was Assembler angeht, musst Du Dich entscheiden, ob Du lieber in einer Hochsprache (C ; Basic) programmieren möchtest, oder doch eher in einer hardwareorientierten Sprache, wie Assembler.
Ich progge jetzt schon seit knapp 1 1/2 Jahren in Asm und bin eigentlich sehr zufrieden, obwohl es manchmal auch ein recht komplizierter Weg ist, der nicht jedem passt!
Wenn Du bereits eine Hochsprache kannst, dann kannst Du auch mit ihr den AVR proggen, dazu suchst Du am Besten hier im Forum oder per google.
Ich kenne bisher keine Internetsite, auf der hauptsächlich in Asm programmiert wird, also musst Du wohl oder übel die Datenblätter lesen und im Notfall Hochsprachencodes übersetzen. (Das klingt schwer, ist es aber nicht unbedingt) ;o9
Assembler ist im Gegensatz zu Hochsprachen schneller und auch Speicherplatzfreundlicher, also überleg Dir was Du nimmst! :o)

Assembler - Rules! ;o)

10.12.2004, 18:55
avrfreaks.net ist eine gute Informationsquelle für alle die Englisch beherrschen, wer es nicht kann muss es sich eh über kurz oder lang beibringen.

Florian
11.12.2004, 08:58
Achso, eins habe ich vergessen, auf mikrocontroller.net gibt es ein Tutorial mit Asm!

11.12.2004, 12:50
Ein bißchen kann ich ja schon mit Assembler machen (z.B. solche Sachen wie auf www.mikrocontroller.net),
suche halt Seiten die sich direkt mit PWM und AVR beschäftigen

Florian
11.12.2004, 12:57
Ich habe einfach die Codes von http://www.mc-project.de übersetzt, das geht eigentlich sehr einfach!
Ich kann Dir von mir aus auch Codes rüberschicken, wenn Du möchtest, dann melde Dich bei mir: florian@cer-online.de

11.12.2004, 13:06
Das wäre gut! Ich schreib dir nachher mal ne eMail!

Florian
11.12.2004, 13:27
Ich suche schnell den Code raus und sende ihn Dir dann mit Erklärung zu! :o)

Florian
11.12.2004, 14:14
Ich habe mich entschlossen den Code hier zu posten, denn vielleicht kann ihn ja noch jemand anderes gut gebrauchen! :o9



.include "m8def.inc"

.def temp = r16

start:
ldi temp , LOW (RAMEND)
out SPL , temp

ldi temp , HIGH (RAMEND)
out SPH , temp


ldi temp , 0xFF
out DDRB , temp


ldi temp , 0xF3
out TCCR1A , temp

ldi temp , 0x0A
out TCCR1B , temp

sei

main:
ldi temp , 0x01
out OCR1AH , temp

ldi temp , 0xFF
out OCR1AL , temp

ldi temp , 0x00
out OCR1BH , temp

ldi temp , 0xFF
out OCR1BL , temp

rjmp main


Das ist der selbe Code wie auf http://www.mc-project.de, nur übersetzt in Asm!
Die PWM-Impulse kommen aus den beiden Pins PB1/2 also OC1A/B heraus.
Wenn man sich den Text auf http://www.mc-project.de genau durchließt kann man die PWM-Signale leicht konfigurieren.

Zur Erklärung:

ldi temp , LOW (RAMEND)
out SPL , temp

ldi temp , HIGH (RAMEND)
out SPH , temp
Hier wird als Erstes der Stackpointer initalisiert!


ldi temp , 0xFF
out DDRB , temp
Hier wird PB als Ausgang konfiguriert.


ldi temp , 0xF3
out TCCR1A , temp
Als Nächstes wird Modulator eingestellt.
Hier ist der Modulator auf 10bit PWM im Phase Correct PWM Mode eingestellt. Durch umstellen der bits kann man wie auf http://www.mc-project.de erklärt die Auflösung usw. ändern.


ldi temp , 0x0A
out TCCR1B , temp
Hier wird der Prescaler eingestellt.


sei
Interrupts werden global aktiviert.


ldi temp , 0x01
out OCR1AH , temp

ldi temp , 0xFF
out OCR1AL , temp

ldi temp , 0x00
out OCR1BH , temp

ldi temp , 0xFF
out OCR1BL , temp

rjmp main
Hier wird die PWM-Frequenz eingestellt und in einer Endlosschleife widerholt.


Ich hoffe ich konnte helfen, wenn noch Fragen offen sind, was ich sehr stark vermute, dann stellt sie ruhig! :o)

Viel Spass und Erfolg! :o)[/code]

11.12.2004, 16:14
Sowas habe ich gesucht! Besten Dank! :mrgreen:

Florian
12.12.2004, 00:10
Funktioniert denn der Code auch?
Ich habe in meinem Sammelsurium lange gestöbert und dazwischen waren auch einige nicht funktionierende Nieten! ;o)