PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Bascom AVR 2.0.7.3



D35troy3r
25.08.2012, 14:57
Hallo,

ich hab vor kurzem auf die neue Version geupdatet und nun funktioniert mein Programm nicht mehr richtig :(.

' µC Deklarationen ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++
$regfile = "m328pdef.dat"
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40
$lib "mcsbyte.lbx"

' Ein-/Ausgänge ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++

' Timer/PWM/Config ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++
Config Timer1 = Pwm , Compare A Pwm = Clear Down , Prescale = 256
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
Blau Alias Pwm2a
Gruen Alias Pwm1a
Rot Alias Pwm2b

Config Rc5 = Pind.2
Enable Interrupts
Config Int0 = Low Level

' Variablen/Subs ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
Dim Rot2 As Byte , Gruen2 As Byte , Blau2 As Byte
Dim Eeprom1 As Eram Word , Eeprom2 As Eram Byte , Eeprom3 As Eram Byte 'X ; funktion ; Betriebsstatus
Dim Address As Byte , Command As Byte
Dim Wechselzeit As Byte , Ledstatus As Byte , Funktion As Byte , A As Word
Wechselzeit = 0
Dim Y As Word , X As Word , Betrieb As Byte

Declare Sub Fader
Declare Sub Init
Declare Sub Funktionen

' Hauptprogramm ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++
Call Init

Do 'RC5 + Funktionsfestlegung
Getrc5(address , Command)
If Address = 9 Then
Command = Command And &B01111111

If Command = 0 Then
Incr Funktion
If Funktion > 2 Then Funktion = 0
Eeprom2 = Funktion
Rot = 0
Gruen = 0
Blau = 0
Waitms 100 'Umschaltzeit für Funktionen (100ms)

If Funktion = 0 Then
For A = 0 To 2
Rot2 = Lookup(x , Farben)
Rot = Rot2
Incr X
Gruen2 = Lookup(x , Farben)
Gruen = Gruen2
Incr X
Blau2 = Lookup(x , Farben)
Blau = Blau2
Incr X
X = X - 3
Waitms 50
Rot = 0
Blau = 0
Gruen = 0
Waitms 50
Next
A = 0
End If
Call Init
End If

If Command = 1 And Funktion = 0 Then 'Manuell
X = X + 6
If X > 301 Then X = 0
Eeprom1 = X
End If
If Command = 2 And Funktion = 0 Then
X = X - 9
If X > 10000 Then X = 300
Eeprom1 = X
End If


If Rot < 250 And Gruen < 250 And Blau < 250 And Command = 1 And Funktion = 2 Then 'Weiß
Rot = Rot + 25
Gruen = Gruen + 25
Blau = Blau + 25
End If
If Rot > 25 And Gruen > 25 And Blau > 25 And Command = 2 And Funktion = 2 Then
Rot = Rot - 25
Gruen = Gruen - 25
Blau = Blau - 25
End If

If Command = 5 Then 'Aus/ein über Fernbedienung
Eeprom3 = 0
Do
If Rot > 0 Then Decr Rot
If Gruen > 0 Then Decr Gruen
If Blau > 0 Then Decr Blau
Waitms 5 'Dimmschnelligkeit
Loop Until Rot = 0 And Gruen = 0 And Blau = 0
Do
Enable Int0
Power Powerdown
Disable Int0
Getrc5(address , Command)
If Address = 9 Then Command = Command And &B01111111
Loop Until Command = 5
Eeprom3 = 1
Call Init
End If
End If
Call Funktionen

Loop
End

' Funktionen++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++
Sub Funktionen
If Funktion = 0 Then 'Manuelle Farbe
Rot2 = Lookup(x , Farben)
Rot = Rot2
Incr X
Gruen2 = Lookup(x , Farben)
Gruen = Gruen2
Incr X
Blau2 = Lookup(x , Farben)
Blau = Blau2
Incr X
X = X - 3
End If

If Funktion = 1 Then 'Fader
For A = 0 To 3
Call Fader
Next
End If
End Sub


Sub Fader: 'Fading
If Rot < 255 And Gruen < 2 And Blau > 254 Then
Ledstatus = 3
Rot = Rot + 1
End If
If Gruen < 255 And Rot > 254 And Blau < 2 Then
Ledstatus = 1
Gruen = Gruen + 1
End If
If Blau < 255 And Rot < 2 And Gruen > 254 Then
Ledstatus = 2
Blau = Blau + 1
End If
If Ledstatus = 1 And Gruen > 254 Then
Rot = Rot - 1
End If
If Ledstatus = 2 And Rot > 254 Then
Gruen = Gruen - 1
End If
If Ledstatus = 3 And Rot > 254 Then
Blau = Blau - 1
End If
If Ledstatus = 1 And Blau > 254 Then
Rot = Rot - 1
End If
If Ledstatus = 2 And Blau > 254 Then
Gruen = Gruen - 1
End If
If Ledstatus = 3 And Gruen > 254 Then
Blau = Blau - 1
End If
Waitms Wechselzeit
End Sub


Sub Init 'Initialisierung
X = Eeprom1
Funktion = Eeprom2
Betrieb = Eeprom3

If Betrieb = 0 Then
Do
Enable Int0
Power Powerdown
Disable Int0
Getrc5(address , Command)
If Address = 9 Then Command = Command And &B01111111
Loop Until Command = 5
Eeprom3 = 1
End If

If Funktion = 0 Then
Rot2 = Lookup(x , Farben)
Rot = Rot2
Incr X
Gruen2 = Lookup(x , Farben)
Gruen = Gruen2
Incr X
Blau2 = Lookup(x , Farben)
Blau = Blau2
Incr X
X = X - 3
End If

If Funktion = 1 Then 'Fader
Ledstatus = 1
Rot = 255
Gruen = 0
Blau = 0
End If

If Funktion = 2 Then 'weiß
Rot = 255
Gruen = 255
Blau = 255
End If
End Sub

Farben: 'RGB
Data 255 , 0 , 0
Data 255 , 15 , 0
Data ..........

Enthält mein Programm veraltete Befehle oder sonstiges?
Wenn ich es mit Bascom AVR 1.11.9.8 Übertrage funktioniert es, wenn ichs mit der neuen Version übertrage läuft irgendwie alles viel schneller ab als vorher...als hätte ich den Takt erhöht. Fusebit´s sind dennoch richtig gesetzt.
Merkwürdig ist auch das ich alle Funktionen nach dem Übertragen einmal durchgehen kann und wenn die Funktion 2 (weiß) startet bleibt das Programm stehen. Keine Reaktion auf die Fernbedienung.

Wurde vllt der Getrc5 Befehl verbessert?


>>Problem teils behoben<<
Da google ich den ganzen Tag, finde nichts und nun nach dem ich diesen Beitrag erstellt hab finde ich eine Teillösung -.-

Seit dem neuen Bascom: CONFIG RC5 = pin [,TIMER=2] [,WAIT=value]

Nun reagiert meine Schaltung auf die Fernbedienung wieder...nur irgendwie etwas komisch, die Funktionen werden viel zu schnell durchgeschalten und alle Wait-Befehle laufen schneller ab?!
Seit der neuen Version habe ich auch Probleme beim Übertragen von Programmen mit meinem "mySmartUSB light". (Siehe Bild)
Firmware wurde geupdatet, genauso wie Treiber. In Bascom ist STK500 native driver ausgewählt.
Das Übertragen funktioniert nur noch wenn erst der Chip gelöscht und dann "write to buffer" gewählt wird.
23097

Gruß
D35troy3r