Hallo,
sorry hast vollkommen recht...ich hab schon soooo viel gefragt, daß ich den Wald vor lauter Bäumen nicht mehr sehe.
Kapiert hab ich nun, daß für PortB PCInt1 zuständig ist.
Ist nun schon 2:00...ich mache nachher weiter!
Neeee..hab auch meinen Stolz.
Ich hab es Dank deiner Anmerkungen hinbekommen
Hier das kpl. recht gut dokumentierte Listing.
Code:
' Compiler: Bascom 1.11.8.3
' Testboard: myAVR Board USB2.
' D5 an LED rot, D6 an LED gelb, D7 an LED grün.
' Taster 1 an C0, Taster 2 an C1.
'###############################################
'BASISEINSTELLUNGEN:
' Port B ist teils für die PWM von Timer 1 reserviert.
' Port C ist für den Interrupt PCInt1 reserviert (vorerst C0, C1 und C2).
' Port D ist allgemein Ausgang.
'Initialisierungen µC und Takt
$regfile = "m48def.dat" 'Definitionsdatei für den Mega48.
$crystal = 8000000 'Quarzfrequenz 8,0MHz.
'---------------------------------------------------------------------------
'Portbelegungen
Config Pinb.1 = Output 'Pin B1 (Pin 15) als PWM-Ausgang Timer1 konfiguriert.
Config Pinb.2 = Output 'Pin B2 (Pin 16) als PWM-Ausgang Timer1 konfiguriert.
Portc = &B11111111 'PullUp von allen Pins Port C aktivieren.
Ddrc = &B00000000 'Port C kpl. als Eingang deklariert.
Portd = &B11100000 'PullUp von Pin PD5, PD6 und PD7 aktivieren.
Ddrd = &B11111111 'Port D kpl. auf Ausgang deklariert.
Config Portc = Input 'Der ganze Port C als Input deklariert.
Portc = &B11111111 'Der ganze Port C PullUp eingeschaltet > pcint0-pcint7 (portb.0-portb.7).
'---------------------------------------------------------------------------
'Interrupt-Deklaration
Enable Interrupts 'Global Interrupts erlauben.
Enable Pcint1 'Enable Interrupts an Port C, Pin 1 und 23-28 (PC0-PC6).
Pcmsk1 = &B00000111 'Enable pcint8-pcint10 (portc.0-portc.2) zur Interrupt-Überwachung.
On Pcint1 Taster 'Wenn an PortC das Level wechselt, Sprung zu Label Taster.
'---------------------------------------------------------------------------
'Variablen-Deklaration
Dim Pwmtv As Word 'Deklaration der PWM-Tastverhältnis-Variablen.
Dim Startwert As Word 'Deklaration der Startvariablen für die Nachführgeschwindigkeit.
Startwert = 256 'Vorbelegung des Startwertes wird später aus EEPROM gelesen.
'---------------------------------------------------------------------------
'Timer/PWM-Einstellungen
'Timer 1 konfigurieren auf PWM-9 Bit Modus, somit 512 Schritte im PWM-Tastverhältnis.
'Durch Konfiguration auf Clear Down erhöht sich das PW-Tastverhältnis mit größerer Zahl > mehr Power.
'Der Prescaler kann nur 1, 8, 64, 256 oder 1024 sein.
'Die PWM-Ausgangsfrequenz ist = (Quarzfrequenz/Prescale ) /(Timerauflösung*2).
'Bei 8MHz, 9Bit Genauigkeit und Prescaler 8 also (8.000.000/8)/(512*2)=976,6Hz.
Config Timer1 = Pwm , Pwm = 9 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Compare1a = 511 'Voll Power an Pin B1 (Pin15) (0-511 bei 512 Stufen).
Compare1b = 256 'Power an Pin B2 (Pin 16) runtergedreht auf Tastverhältnis 50%.
'---------------------------------------------------------------------------
'Programm
Do
Portd.5 = Not Portd.5 'LED blinkt als Programmsimulation.
Waitms 30
Loop
'Sprungmarke Label Taster
Taster: 'Label Taster, Sprungmarke für Pcint0-Interrupt.
Waitms 20 'Taster entprellen
If Pinc.0 = 0 Then Portd.6 = Not Portd.6 'Gelbe LED (Pin PD6) an oder aus, wenn Taster 1 an Pin C0 gedrückt.
If Pinc.1 = 0 Then Portd.7 = Not Portd.7 'Grüne LED (Pin PD7) an oder aus, wenn Taster 2 an Pin C1 gedrückt.
Return 'Verläßt die On Interrupt-Funktion (On Pcint1 Taster).
End 'Programmende.
Die PWM-Geschichte funktioniert auch, wenn ich auch noch Probleme habe sie extern zu takten...aber das kommt noch!
Was meinst Du, ist das so sauber und OK?
Nochmals Danke!
Wolfram
Lesezeichen