nase
05.05.2009, 19:40
Bin Anfänger im Programmieren des Atmega 32, habe dennoch versucht einen Frequenzgenerator zu Basteln bei dem ich die Frequenz mit einer möglichst hohen Bandbreite einstellen kann.Es ist mir auch soweit gelungen
Kann auch die Frequenz einstellen im Bereich von ca 5 Herz bis 25Khz
allerdings ist der Einstellbereich nicht Linear, hat da jemand einen besseren Vorschlag oder einen Hinweis wo man nachschlagen kann.
Dann ist da noch die obere Maximale Frequenz von ca 25 Khz kann ich die höher bekommen ?
Ich benutze einen 8 Mhz Quarz
mfg Nase
Folgender Bascon Code:
__________________________________________________ __________________
' Frequenzgenerator 1 E
'Led 1(grün) Blinkt im Takt
'ca im Sekunden Takt, mit Taste 1 kann Frequenz erhöht werden und mit Taste 2
' verringert werden
'--------------------- Allgemeine Prozessor Konfiguration ---------------------
$baud = 9600 'Rs232 Datenüberagungsrate
$regfile "m32def.dat" 'Definiert den Atmega als Atmega 32
$crystal = 8000000 'Gibt die Quarzfrequenz an in Herz
'-----------------------------------------------------------------------------
' Variablen definieren
Dim Wert1 As Word
Dim A As Long 'Schrittweite zum Aufwärts-Zählen
Ddra = &B0011111 ' Port A0 bis A7 als Ausgänge setzen für Leds
Ddrb = &B00000000 ' Port B komplett als Eingänge setzen für Taster
Portb = &B00011110 ' Port B1-B2-B3-B4 PullUp aktivieren für Taster
'-----------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 8
'Bestimmt das Timer 1 verwendet und teilt den Takt durch 8
Enable Timer1 'Startet Timer 1
On Timer1 Test 'springt bei Überlauf nach " Test"
Enable Interrupts 'Interrupt aktivieren
'------------------------------------------------------------------------------
' Konfiguration fürs Display
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.6 , Db7 = Portc.7 , Rs = Portc.5 , E = Portc.4
'______________________ H a u p t p r o g r a m m ____________________________
A = 100 ' Vorgabewert für Schrittweite bei Aufwärts zählen
Do
'Hier wird über Tasten 1 und 2 der Wert für die Voreinstellung des Timers
' geändert
If Pinb.0 = 1 Then Waitms 20
If Pinb.0 = 1 Then Wert1 = Wert1 + A
Waitms 20
If Pinb.1 = 0 Then Waitms 20
If Pinb.1 = 0 Then Decr Wert1
Cls
Locate 1 , 1
Lcd Wert1 ; "Voreinst."
Loop
'_____________________ H a u p t p r o g r a m m - E n d e ____________________
Test: 'Sprungmarke zu der gesprungen wird wenn der Timer einen Überlauf hat
Timer1 = Wert1 'Timer soll ab (Wert aus Wert1) hochzählen
Toggle Porta.0
'Port A.0 bei jeden Überlauf umschalten
Return
_________________ Ende ________________________________________
Code-Tags verwenden, Kollege ! (PicNick, Mod)
Kann auch die Frequenz einstellen im Bereich von ca 5 Herz bis 25Khz
allerdings ist der Einstellbereich nicht Linear, hat da jemand einen besseren Vorschlag oder einen Hinweis wo man nachschlagen kann.
Dann ist da noch die obere Maximale Frequenz von ca 25 Khz kann ich die höher bekommen ?
Ich benutze einen 8 Mhz Quarz
mfg Nase
Folgender Bascon Code:
__________________________________________________ __________________
' Frequenzgenerator 1 E
'Led 1(grün) Blinkt im Takt
'ca im Sekunden Takt, mit Taste 1 kann Frequenz erhöht werden und mit Taste 2
' verringert werden
'--------------------- Allgemeine Prozessor Konfiguration ---------------------
$baud = 9600 'Rs232 Datenüberagungsrate
$regfile "m32def.dat" 'Definiert den Atmega als Atmega 32
$crystal = 8000000 'Gibt die Quarzfrequenz an in Herz
'-----------------------------------------------------------------------------
' Variablen definieren
Dim Wert1 As Word
Dim A As Long 'Schrittweite zum Aufwärts-Zählen
Ddra = &B0011111 ' Port A0 bis A7 als Ausgänge setzen für Leds
Ddrb = &B00000000 ' Port B komplett als Eingänge setzen für Taster
Portb = &B00011110 ' Port B1-B2-B3-B4 PullUp aktivieren für Taster
'-----------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 8
'Bestimmt das Timer 1 verwendet und teilt den Takt durch 8
Enable Timer1 'Startet Timer 1
On Timer1 Test 'springt bei Überlauf nach " Test"
Enable Interrupts 'Interrupt aktivieren
'------------------------------------------------------------------------------
' Konfiguration fürs Display
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.6 , Db7 = Portc.7 , Rs = Portc.5 , E = Portc.4
'______________________ H a u p t p r o g r a m m ____________________________
A = 100 ' Vorgabewert für Schrittweite bei Aufwärts zählen
Do
'Hier wird über Tasten 1 und 2 der Wert für die Voreinstellung des Timers
' geändert
If Pinb.0 = 1 Then Waitms 20
If Pinb.0 = 1 Then Wert1 = Wert1 + A
Waitms 20
If Pinb.1 = 0 Then Waitms 20
If Pinb.1 = 0 Then Decr Wert1
Cls
Locate 1 , 1
Lcd Wert1 ; "Voreinst."
Loop
'_____________________ H a u p t p r o g r a m m - E n d e ____________________
Test: 'Sprungmarke zu der gesprungen wird wenn der Timer einen Überlauf hat
Timer1 = Wert1 'Timer soll ab (Wert aus Wert1) hochzählen
Toggle Porta.0
'Port A.0 bei jeden Überlauf umschalten
Return
_________________ Ende ________________________________________
Code-Tags verwenden, Kollege ! (PicNick, Mod)