Schade eigentlich. Denn erstens hab ich mich inzwischen auf Bascom eingeschossen, und Großteil vom restlichen Programm schon darin implementiert, zum anderen besitzt Bascom doch diese Routinen, zumindest zum auslesen.
Nur arbeitet die bei mir halt nicht, also wenn jemand den Fehler sieht, bzw. weiß wie man PWM auslesen kann würde ich mich freuen.
Und was die Interrupts angeht: hab ich ja im Programm versucht, leider weniger erfolgreich, da dabei ganz komische Sachen passieren und die Ausgabe-Frequenz total falsch ist, je nach Arbeit im Interrupt. Klar schafft er dann nicht mehr volle Geschwindigkeit wenn er dort mehr arbeiten muss, aber wenn er anstatt 1 Mhz 7 kHz oder weniger ausgibt ist das schon ein extremer Unterschied! Würd jetzt sagen der Pin kann nicht schneller als 7kHz , aber er kann sogar 63kHz.
Nun das dann mit Assembler zu machen wäre ne weitere Möglichkeit, Basom bietet ja die Möglichkeit auch Maschienencode direkt einzugeben. Vielleicht auf diese Weise.
Werds später mal versuchen, wobei da muss ich mir noch einiges zu anlesen, wie man die Interrupts und die passenden Register in Assembler anspricht.
Sonst weiß hier keiner was? Komisch eigentlich da ja relativ viele Leute auch mit PWM arbeiten.
Hier mal vergleichbarer Code zum Einstellen der PWM-Frequez aus der C-Control (War das Musterbeispiel)
Code:
'----------------------------------------------------------------------------------
'----- DEMO ----- DEMO ----- DEMO ----- DEMO ----- DEMO ----- DEMO ----- DEMO -----
'----------------------------------------------------------------------------------
'Projektname: PWM_Timer1.cprj
'Benötigte Libs´s: IntFunc_lib.cc, LCD_Lib.cc (neu ab 03.08.2007)
'Routinen: PWM_Timer1.cbas, LCD_start.cbas
'Autor: Ulli Sommer
'Datum: 07.08.2007
'Funktion: Pulsweitenmodulation
'Neue Funktionen:
'Notitz:
'----------------------------------------------------------------------------------
'Variable
'Hauptprogramm
Sub main()
LCD_start() ' LCD Initialisieren
'Timer_T1PWMX(word period,word PW0,word PW1,byte PS)
'Periode=Period*PS/FOSC (100*64/14,7456MHz=434 µs)
'Period legt die Länge des Signals fest
'PW0 gibt an wie lange Kanal A high ist, rest der Periode ist low
'PW1 gibt an wie lange Kanal B high ist, rest der Periode ist low
' <PW>
' ___
' | |
' | |
' _| |__________________
'
'<---Periodenlänge------->
'Über den Timer Prescaler wird das Teilungsverhältnis (Oszillatorfrequenz/ps)
'festgelegt. (14,7456MHz/ps)
'Vorteiler (prescaler) Zeitbasis (Dauer eines Ticks)
'ps_1 (1) 67,8 ns
'ps_8 (2) 542,5 ns
'ps_64 (3) 4,34 µs
'ps_256 (4) 17,36 µs
'ps_1024 (5) 69,4 µs
'Config für Kanal A und B
'Timer_T1PWMX(255,1,1,PS_1)
'Timer_T0PWM(100,64)
Timer_T1PWM( 147, 49, 1) 'Erster Wert für Frequenz (Anzahl der Counts), zweiter Wert Pulsweite, Dritter Wert Prescaler
Do While (1) ' Endlosschleife
End While
End Sub
[/code]
Lesezeichen