Nec Ir Fb

Schau dir mal die Zahlen an oder stelle sie hier ein.
Wenn die Kriterien 68 Flanken, Wert und negierter Wert sich nicht entsprechen oder die Längen nicht stimmen, wird kein Code ausgegeben.

HBA
 
so hab mal alle tasten abgefragt, also es werden immer 68 bit empfangen,
hab mal das startbit markiert, anscheinend gibts da leichte unterschiede,.
die schwanken sehr stark, dürfte jedoch kein problem sein, wenns daran liegen würde müsste ja dann der befehl spätestens nach dem 2ten oder 3ten tastendruck angenommen werden, tut er aber nicht
hab auch noch was über die protokolle von elektor gefunden,
http://uploaded.to/file/o90rk7
 

Anhänge

  • fb tasten.pdf
    43,3 KB · Aufrufe: 8
Hallo Bonze,
da war noch ein kleiner Fehler drin:
Shift Ausgabe , Left
Ausgabe.0 = 1
Die beiden Zeilen waren genau verkehrt herum.

HBA
 
hast recht , jetzt gibt jede taste ein signal ab :)
jetzt muss man nurnoch die taste halten funktion reinbringen und nen kleinen filter, den code noch "optimieren bzw soweit machen das ich alles verstehe :D
dann wäre es fast perfekt,.

kannst du vlleicht die einzelnen programmteile nochmal kurz und knapp erklären ?

hab das mit dem flankenarray bzw den 400 noch ned so verstanden genauso wie die angabe mit der zeit im code,.
theoretisch könnte man doch flankenarray auf 100 setzen,
da es doch eh nur 68bits gibt oder denk ich gaaaanz falsch
 
ich frag mich gerade wie ich wohl am besten die überprüfung einbaue ob die taste gehalten wurde
habs bis jetzt so gemacht, ich denke das würde auch funktionieren,
kommt mir aber komisch vor ,
Code:
select case flanken_index
   Case 4 :
               Print "Anzahl Flanken: " ; Flanken_index
               Print "taste wird gehalten!"

               For I = 0 To 4                               
                  If Flanken_array(i) < 500 Then            'erkennung von 0, kurzer impuls
                     Shift Halten , Left                    'shift left durch durch2
                     Print "kurz"
                     Print Flanken_array(i)
                  Elseif Flanken_array(i) > 2000 And Flanken_array(i) < 50000 Then       'erkennung von 1, langer impuls
                     Shift Halten , Left
                     Halten.0 = 1
                     Print "lang"
                     Print Flanken_array(i)
                  End If
               Next
               Print "haltenbyte: " ; Halten
case 68: 'hbas code
end select

ergibt diese ausgabe im terminal
Anzahl Flanken: 4

taste wird gehalten!
kurz
0
lang
28852
lang
8981
lang
2191
haltenbyte: 119

Unten auf dem Bild ist das empfangene nach 3 zyklen zu sehen, also 3 mal wurde der code für "Taste gehalten" gesendet
 

Anhänge

  • halten.png
    halten.png
    2,7 KB · Aufrufe: 7
irgendwas stimmt mit den pulslänger nicht mehr ,
bekomme keine adresse mehr angezeigt,.
Code:
Anzahl Flanken: 68                                                           
 42227 17928 8871 1160 1020 1215 1019 1162 1072 1163 1019 1215 1019 1162 1072 11
63 1019 1215 1019 1162 3273 1214 3273 1161 3274 1160 3272 1214 3272 1161 3273 11
59 3273 1213 3271 1162 3274 1159 3276 1211 1020 1161 3272 1214 1020 1162 1073 11
62 1021 1213 1020 1161 1073 1162 1021 1214 3274 1159 1021 1214 3272 1161 3272 11
61 3272 1214 3274 1160

Anzahl Flanken: 68
58448 17926 8870 1161 1020 1214 1020 1162 1072 1162 1020 1214 1020 1161 1073 11
62 1021 1214 1020 1161 3274 1212 3273 1160 3273 1161 3276 1210 3273 1160 3274 11
99 3233 1214 3273 1160 1021 1213 1020 1201 3235 1212 1021 1200 3235 1211 1020 12
01 1033 1161 1021 1214 3273 1159 3275 1201 1031 1162 3274 1201 1031 1161 3272 12
05 3232 1212 3274 1160

ich muss also auf <1500(low) und >2000(high) prüfen oder
 
Hallo Bonze,
die Zahlen sehen jetzt viel eher nach den erwarteten NEC Pulslängen aus. Allerdings ist alles etwa doppelt so groß wie die Längen in µs.
Start wäre ja 9000 und 4500. Hast du evtl. wieder den Befehl
Shift Zeit , Right
in der Int0_ISR wieder rausgenommen?
Ansonsten kannst du die Vergleiche so nehmen, wie du geschrieben hast.
Bist du mittlerweile bei der "Taste Halten" Funktionalität weitergekommen?

Für meine WordClock habe ich übrigens die gleiche Routine verwendet, nur auf einem anderen Timer.

HBA
 
gut das dus sagst, deshalb haben meine vergleichswerte nicht mehr gestimmt :D

ja das mit der taste halten funktion hab ich so ähnlich gemacht wie du mit der pulserkennung, also shift left, ..
ergibt dann den wert7, lang, lang, lang, kurz
 
so es geht vorran, hab schon nen großen teil meines programms fertig, jedoch häng ich an komischen verhalten des avrs :D
die Fb tut es soweit auch

kanns sein das sich durch die funktion overlay, speicherbereiche überschneidenß
ich hab das das gefühl, das anstatt die werte aus dem datatable genommen werden, meine variable den wert von adress hat,.

edit:
also nach einem zugriff durch $eeprom sollte man danach natürlich $data benutzen ,. sonst geht was in die hose, wie in meinem fall,....
 
so, es funkioniert jetzt alles, bis auf die geschwindigkeitseinstellung bei Strobe, irgendwie hab ichs gefühl, das ich schon die impulse einstellen kann , aber eher die helligkeit wie die länge bzw die frequenz.. hab auch nen zähler der bis 64 geht und ich dann ne ausgabe wie bei der pwm mache,.

auch hab ich noch probleme mit dem ein/ausschalten,

ich möchte via klatschschalter ein/ausschalten können und via fb mit den tasten on/off, ich dachte daran, ich lasse den mega8 wecken, und vergleiche dann ob die taste On gedrückt wurde, oder beim klatschen ob 2mal geklatschd wurde,. wenn das erfüllt ist power=1
beim ausschalten dann auch wenn taste off gedrückt wurde, oder 2mal geklatschd und power= 1 dann power= 0

Achso, der Klatschschalter und die fb hängen beide an Interrupt eingängen,.
FB INT0
KLatsch INT1

sieht dann so aus
EIN:
if (klatschctr= 2 or taste ON) and power= 0 then
power= 1
gosub load
gosub sleep
endif

AUS:
if (klatschschalter= 2 or taste OFF) and power= 1 then
gosub save
power= 0
gosub wakeup
endif


wie kann ich den mega denn aufwecken und schlafenlegen ? mit bascom finde da im internet ned wirklich irgendwas...

edit:
so hab mal was zusammengebaut,.

Code:
'#POWEROn
'wakeup
   If(klatsch = 1 Or Adresse = 31) And Poweron = 0 Then     ' And Poweron = 1
      Gosub Laden
      Poweron = 1
   Else
      Poweron = 0
      Idle
   endif
'#POWEROff
   If(klatsch = 1 Or Adresse = 159) And Poweron = 1 Then
      Gosub Speichern
      Poweron = 0
      Idle
   Else
      Poweron = 1
   End If

'#Klatschschalter
Klatsch:
   If Int1 = 1 Then
      Incr Klatschctr
   End If

   If Klatschctr > 2 Then
      Klatschctr = 0
   Elseif Klatschctr = 2 Then
      Klatsch = 1
   Else
      Klatsch = 0
   End If
Return

bin mir aber noch sehr unsicher von wegen dem idle modus, sobald ein interrupt kommt (egal welcher), wird er aus dem schlaf gerissen ? oder muss ich da noch was einstellen ?
 
irgendwie klappt das mit dem aufwecken nicht? ich hab doch meinen tsop1136 am Int0, muss ich da noch was besonderes einstellen ?
hab jetzt den powersave modus genommen,
schlafen tut er, bekomme ihn jedoch nicht mehr wach ?
 
Hallo Bonze,
mit welchem Befehl hast du den µC schlafen gelegt? So:
Power Powersave

Hier mal die Möglichkeiten, den Controller wieder aufzuwecken:

Du müsstest also vorher den INT0 auf Low-Level setzen, um ihn wieder aufwecken zu können. Ich nehme an, dass du den TSOP1136 mit einem externen PullUp betreibst. Dann müsste es eigentlich so gehen:

MCUCR.ISC01 = 0 'umschalten von Falling auf Low Level
Power PowerSave

und in der ISR dann
MCUCR.ISC01 = 1 'umschalten von Low Level auf Falling

Evtl. dann noch anstehende Int-Flags löschen.

HBA
 
hab eigentlich alle modi, welche in der bascom hilfe beschrieben sind durchprobiert,.
ja soweit ich das auf meinem steckbrett zuordnen kann, ist es externer pullup


hatte von der logic an das hier gedacht,
wenn ich die Taste "off" auf der fb drücke, geht der mega8 in den schlafmodus,
drücke ich jetzt ne beliebige Taste, wird er ja aufgeweckt, ich überprüfe dann ob es sich um die taste "On" handelte, falls nein , geht er wieder schlafen , falls ja wird mein programm gestartet


Code:
Poweron:
   Print "taste: " ; Adresse
   Print "poweron" ; Poweron
   If Adresse = 159 and poweron= 1 Then 'taste off und avr angeschaltet
      'Gosub speichern
      Poweron = 0
      Print "schlafen gehen"
      Powerdown
   Elseif Adresse = 31 and poweron= 0 Then 'taste on und avr war ausgeschaltet
      'Gosub laden
      Poweron = 1
      Print "wurde angeschaltet"                            
   else 'leg dich wieder schlafen 
      Powerdown
End If
Return
 
so hiermal mein komplettes programm, aber nicht erschrecken, bin noch am rumwurschdeln,.
Code:
$crystal = 16000000
$regfile = "m8def.dat"
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               'default use 10 for the SW stack
$framesize = 40                                             'default use 40 for the frame space
$baud = 19200
'$sim
'Portconfiguration--------------------------------------------------------------
Ddrd = &B11110000

'>FB
Portd.2 = 1
'>Klatschschalter
Portd.3 = 1
Klatsche Alias Portd.3
'>RGB
Helligkeit Alias Portd.4
Dout Alias Portd.5
Latch Alias Portd.6
Clock Alias Portd.7

'Variablenconfig----------------------------------------------------------------
'> Allgemein
Dim Ausgabestring As String * 10

'>FB
Dim Flanken_index As Word
Dim Ausgabe_flag As Byte
Dim I As Word
Dim Flanken_array(400) As Word
Dim Zeit As Word
Dim Ausgabe As Long                                         'in 0,5µs Auflösung
Dim Adresse As Byte At Ausgabe Overlay
Dim Adresse_alt As Byte
Dim Adresse_negiert As Byte At Ausgabe + 1 Overlay
Dim Befehl As Byte At Ausgabe + 2 Overlay
Dim Befehl_negiert As Byte At Ausgabe + 3 Overlay

'->von mir hinzugefuegt
Dim Halten As Byte
Dim I2 As Byte

'>RGB
Dim Pretimer As Byte
Dim Pwmctr As Byte                                          'PWM Zählerbyte
Dim Nullbyte As Byte
Dim Red As Byte
Dim Green As Byte
Dim Blue As Byte
Dim Tred As Byte
Dim Tgreen As Byte
Dim Tblue As Byte
Dim Erreicht As Byte
Dim Colourcounter As Byte
Dim Bright As Byte
Dim Fadezeit As Word
Dim Haltezeit As Byte
Dim Schiebebyte As Byte
Dim Schiebebyte_alt As Byte
Dim Programm As Byte
Dim Strobectr As Byte                                       'Strobo zählervariable
Dim Strobe As Byte                                          'strobo zeit
'>Save&Load
Dim Einstellungen_rom(5) As Eram Byte
Dim Einstellungen(5) As Byte
'>Save&Load
Dim Poweron As Byte

'>Klatschschalter
Dim Klatsch As Byte
Dim Klatschctr As Byte

'Timerconfig--------------------------------------------------------------------
'>FB
Config Timer1 = Timer , Prescale = 8                        'hier den Timer eintragen (8-bit)
Enable Timer1
'>RGB
Config Timer0 = Timer , Prescale = 8
Start Timer0

'Interruptconfig----------------------------------------------------------------
'>FB
On Ovf1 Tim1_isr
Config Int0 = Change                                        'externer interrupt, z.B. INT0 auf portd.2 oder INT1 auf PinD.3
'#
On Int0 Int0_isr
Enable Int0
'>PWM
On Ovf0 Pwm_timer                                           ' jump to fadingroutine when the timer0 overrun
Enable Timer0

Enable Interrupts
Flanken_index = 400                                         'max 400flanken bzw bits erkennen

'##########################
'Fadezeit = 200'wird durch programm dade/smooth festgelegt 'ms

'Hauptprogramm
Colourcounter = 0
Poweron = 1
Bright = 64
'Haltezeit = 2                                               's
Erreicht = 0
Pwmctr = 0
Schiebebyte = 255
Programm = 0
'##########################
Print "Version 0.1 vom " ; Version(1)
Print "Copyright by Manuel Holländer"
If Programm = 0 Then
      Print "Bitte wähle einen programm modus"
   End If

'Einstellungen(1) = 1
'   Einstellungen(2) = 4
'   Einstellungen(3) = 3
'   Einstellungen(4) = 42
'   Einstellungen(5) = 34
'   Gosub Speichern
'#################################Hauptprogramm#################################
'ehemals helligkeit Set En_out

Do

   'FB INt ANFANG
   If Ausgabe_flag = 1 Then                                 'wenn etwas empfanegn wurde
      Ausgabe_flag = 0
      'Debugausgabe-------------------------------------------------------------------
        'Print "Anzahl Flanken: " ; Flanken_index
           ' For I = 1 To Flanken_index  'alle flankenzeiten ausgeben
      '          Print " " ; Flanken_array(i);
      '      Next I
          ' Print "------------------------------------------------------------------"
      'Debugausgabe-------------------------------------------------------------------
      Select Case Flanken_index
        Case 68:
                 Print "Tastendruck erkannt, Anzahl Flanken: " ; Flanken_index
                 If Flanken_index = 68 Then
                    For I = 5 To 67 Step 2
                       If Flanken_array(i) < 1000 Then
                          Shift Ausgabe , Left
                       Elseif Flanken_array(i) > 1000 And Flanken_array(i) < 4000 Then

                          Shift Ausgabe , Left
                          Ausgabe.0 = 1
                       End If
                    Next I
                    Adresse_negiert = Not Adresse_negiert
                    Befehl_negiert = Not Befehl_negiert
                    If Adresse = Adresse_negiert And Befehl = Befehl_negiert Then
                       Print "Empfang ok: Adresse=" ; Adresse ; "(" ; Bin(adresse) ; "), Befehl=" ; Befehl ; "(" ; Bin(befehl) ; ")"

                    End If
                 End If
                 Print "------------------------------------------------------------------"
        Case 4:
                 Print "Tastendruck erkannt, Anzahl Flanken: " ; Flanken_index

                 For I = 0 To 4                             'die ersten 4 empfangenen flanken auswerten
                    If Flanken_array(i) < 500 Then          'erkennung von 0, kurzer impuls
                       Shift Halten , Left
                    Elseif Flanken_array(i) > 2000 And Flanken_array(i) < 50000 Then       'erkennung von 1, langer impuls
                       Shift Halten , Left
                       Halten.0 = 1
                      ' Print "halten" ; Halten
                    End If
                 Next
                 'erkennung ob taste gehalten wurde
                 If Halten >= 7 And Adresse_alt > 0 Then    'falls eine taste gedrückt wurde, und dann die taste gehalten wird
                    Print "Taste wurde gehalten, signal wird erneut verarbeitet!"
                    Adresse_alt = Adresse
                 Else
                    Adresse_alt = 0
                    'Adresse = 0
                    Halten = 0
                 End If
                 Waitms 100                                 'das es besser zu dimmen ist
                 Print "haltenbyte: " ; Bin(halten) ; " / " ; Halten
                 Print "------------------------------------------------------------------"
      End Select
      'Tastenauswertung---------------------------------------------------------
      Select Case Adresse

         Case 95:                                           '#heller
                  Ausgabestring = "heller"

                  If Programm = 2 Then                      'falls strobe aktiviert ist, sind die tasten zur geschwindigkitseinstellung
                    'If Strobectr < 44 Then
'                        Strobectr = Strobectr + 6
'                    End If
                     If Strobe < 44 Then
                        Strobe = Strobe + 6
                     End If
                  Else
                     If Bright < 64 Then
                        Bright = Bright + 8
                     End If
                  End If

         Case 223:                                          '#dunkler
                  Ausgabestring = "dunkler"
                  If Programm = 2 Then                      'falls strobe aktiviert ist, sind die tasten zur geschwindigkitseinstellung
                     'If Strobectr > 6 Then
'                        Strobectr = Strobectr - 6
'                     End If
                     If Strobe > 6 Then
                        Strobe = Strobe - 6
                     End If
                  Else
                     If Bright > 0 Then
                        Bright = Bright - 8
                     Else
                        Helligkeit = 0
                     End If
                  End If


         Case 159:                                          '#off
                  Ausgabestring = "off"
                  Poweron = 0
         Case 31:                                           '#on
                  Ausgabestring = "on"
                  Poweron = 1
         Case 111:                                          '##rot
                   Red = 64
                   Green = 0
                   Blue = 0
                  Colourcounter = 0
                  Ausgabestring = "rot"
         Case 239:                                          '##grün
                  Colourcounter = 5
                  Ausgabestring = "gruen"
         Case 175:                                          '##blau
                  Colourcounter = 11
                  Ausgabestring = "blau"
         Case 47:                                           '##weiss
                  Red = 64
                  Green = 64
                  Blue = 64
                  Colourcounter = 16
                  Ausgabestring = "weiss"
         Case 79:                                           '###rot1
                  Colourcounter = 2
                  Ausgabestring = "rot1"
         Case 207:                                          '###grün1
                  Colourcounter = 7
                  Ausgabestring = "grün1"
         Case 143:                                          '###blau1
                  Colourcounter = 12
                  Ausgabestring = "blau1"
         Case 15:                                           '###flash
                  Programm = 1
                  Red = 64
                  Green = 64
                  Blue = 64
                  Ausgabestring = "flash"
         Case 87:                                           '####rot2
                  Colourcounter = 3
                  Ausgabestring = "rot2"
         Case 215:                                          '####grün2
                  Colourcounter = 8
                  Ausgabestring = "grün2"
         Case 151:                                          '####blau2
                  Colourcounter = 13
                  Ausgabestring = "blau2"
         Case 23:                                           '####strobe
                  Programm = 2
                  Strobectr = 32                            ' blinkfrequenz vorladen
                  Ausgabestring = "strobe"
         Case 103:                                          '#####rot3
                  Colourcounter = 4
                  Ausgabestring = "rot3"
         Case 231:                                          '#####grün3
                  Colourcounter = 9
                  Ausgabestring = "grün3"
         Case 167:                                          '#####blau3
                  Colourcounter = 14
                  Ausgabestring = "blau3"
         Case 39:                                           '#####fade
                  Programm = 3

                  'Colourcounter = 13
                  Ausgabestring = "fade"
         Case 103:                                          '######rot4
                  Colourcounter = 5
                  Ausgabestring = "rot4"
         Case 231:                                          '######grün4
                  Colourcounter = 10
                  Ausgabestring = "grün4"
         Case 167:                                          '######blau4
                  Colourcounter = 15
                  Ausgabestring = "blau4"
         Case 39:                                           '######smooth
                  Programm = 4

                  'Colourcounter = 13
                  Ausgabestring = "smooth"
      End Select
      If Poweron = 0 Then
         Gosub Poweron
      End If
      '---------------------------------------------------------------
      'Halten = 0                                            'haltebyte zurücksetzen
      Flanken_index = 400
      Timer1 = 0
      Start Timer1
      If Gifr.intf0 = 0 Then Enable Int0                    'falls zwischenzeitlich kein INT0 aufgetreten ist
   End If
   'FB int ENDE-----------------------------------------------------------------
 
Code:
'##Programmwahl
  Select Case Programm
      Case 1:                                               'Flash  = Dauerfarbe
             Red = Lookup(colourcounter , Redtable)
             Green = Lookup(colourcounter , Greentable)
             Blue = Lookup(colourcounter , Bluetable)
             Print "rot " ; Red
             Print "green " ; Green
             Print "blue " ; Blue
      Case 2:                                               'strobe  = blinken
             Bright = 64                                    'helligkeit auf 100% einstellen
             'If Strobectr < 255 Then
'               Incr Strobectr
'             Else
'               Strobectr = 0
'             End If

             If Strobectr > Pwmctr Then
                  Red = Lookup(colourcounter , Redtable)
                  Green = Lookup(colourcounter , Greentable)
                  Blue = Lookup(colourcounter , Bluetable)
             Else
                  Red = 0
                  Green = 0
                  Blue = 0
             End If

             'Print "strobectr" ; Bright ; " \ " ; Strobectr
            ' Print "rot " ; Red
             'Print "green " ; Green
             'Print "blue " ; Blue

      Case 3 To 4:                                          '3fade = schnell faden /'4smooth = langsam faden
               'verzögerungszeit je nach Programm
              If Programm = 3 Then                          'schnell faden
                  Fadezeit = 200
                  Haltezeit = 2
              Elseif Programm = 4 Then                      'langsam faden
                  Fadezeit = 800
                  Haltezeit = 6
              End If

              If Red < Tred Then
                 Incr Red
              Elseif Red > Tred Then
                 Decr Red
              Else
                 Erreicht.0 = 1
                 'Print "rotwert erreicht!"
              End If
              If Green < Tgreen Then
                 Incr Green
              Elseif Green > Tgreen Then
                 Decr Green
              Else
                 Erreicht.1 = 1
                 'Print "grünwert erreicht!"
              End If
              If Blue < Tblue Then
                 Incr Blue
              Elseif Blue > Tblue Then
                 Decr Blue
              Else
                 Erreicht.2 = 1
                 'Print "blauwert erreicht!"
              End If


              Waitms Fadezeit                               'zeit zwischen jedem fadeschritt


              If Erreicht = 7 Then
              Wait Haltezeit                                'zeit welche farbe gehalten wird bis es losfaded zur nächsten
                 Print "farbe erreicht, lade nächste zielwerte,"
                 Print "Farbe: " ; Colourcounter
                 Erreicht = 0
                 Colourcounter = Colourcounter + 3
                 If Colourcounter >= 15 Then                'colourcounter zurücksetzen
                    Colourcounter = 0
                 End If
                 Tred = Lookup(colourcounter , Redtable)
                 Tgreen = Lookup(colourcounter , Greentable)
                 Tblue = Lookup(colourcounter , Bluetable)
              End If
  End Select

  'debugausgaben
  'Print "programm-modus " ; Programm
  'Print "Colourcounter " ; Colourcounter
  'Print "Taste " ; Adresse ; " / " ; Ausgabestring
  'Print "Helligkeitswert" ; Bright

Loop
End
'ROUTINEN-----------------------------------------------------------------------
'#FB
Tim1_isr:                                                   'wenn der Timer überläuft, hat es 16.000.000 / 8 / 65536 ~ 33ms kein IR Signal gegeben
   If Flanken_index < 400 Then                              'Flanke ist vor dem Empfang auf 400;
      Disable Int0
      Stop Timer1
      Ausgabe_flag = 1
   Else
      If Gifr.intf0 = 1 Then Gifr.intf0 = 1                 'sieht blöd aus, bewirkt aber das Löschen eines zwischenzeitlich aufgetretenen Interrupts
      Enable Int0                                           'nun kann Int0 wieder freigegeben werden. Hierdurch synchronisiert er auf den Anfang des nächstes Codes
   End If
Return

Int0_isr:                                                   'RC Impuls erkannt
   Zeit = Timer1                                            'abgelaufene Zeit speichern
   Timer1 = 0                                               'Timer1 neu starten
   Zeit = Zeit - 7                                          '-7 weil das Aufrufen der ISR etwa 56 Takte dauert, der Timer1 also um 7 weiterzählt
   Shift Zeit , Right                                       'nun stehen µs in Zeit
   If Flanken_index = 400 Then
      Flanken_index = 0                                     'start eines neuen Befehls
   End If
   If Flanken_index < 400 Then Incr Flanken_index
   Flanken_array(flanken_index) = Zeit
Return

'#PWM
Pwm_timer:
    If Pwmctr < 64 Then                                     'max 64 durchläufe, dann neuer zyklus
      Incr Pwmctr
    Else
      Pwmctr = 0
    End If

    If Bright < Pwmctr Then
       Helligkeit = 0                                       'led an
    Else
      Helligkeit = 1                                        'led aus
    End If

    If Red < Pwmctr Then
       Schiebebyte.0 = 0                                    'led an
    Else
       Schiebebyte.0 = 1                                    'led aus
    End If

    If Green < Pwmctr Then
       Schiebebyte.1 = 0                                    'led an
    Else
       Schiebebyte.1 = 1                                    'led aus
    End If

    If Blue < Pwmctr Then
       Schiebebyte.2 = 0                                    'led an
    Else
       Schiebebyte.2 = 1                                    'led aus
    End If

        'Schieberegister ansteuerung
        If Schiebebyte <> Schiebebyte_alt Then              'ändert sich der Wert nicht mehr wird nicht mehr der ausgang gepulst, somit ergeben sich satte farben
           Latch = 1                                        'latch setzen
           Shiftout Dout , Clock , Schiebebyte , 0 , 8 , 1  'µs warten
           Latch = 0                                        'latch zurücksetzen
           Latch = 1                                        'latch setzen
           Schiebebyte_alt = Schiebebyte
        End If
Return
'#Save&Load

'data
'programmnummer,(farbe falls bei programm vorhanden), helligkeit, geschwindigkeit


$eeprom

'Data 1        , 2             , 3     , 4      , 5
'Data Programm , Colourcounter , Bright,

Speichern:                                                  'der einstellunegn im EEPROM
   For I2 = 0 To 5
      Einstellungen_rom(i2) = Einstellungen(i2)
   Next
Return

Laden:                                                      'der einstellunegn im EEPROM
   For I2 = 0 To 5
      Einstellungen(i2) = Einstellungen_rom(i2)
      Print "Data" ; I2 ; " " ; Einstellungen(i2)
   Next
Return

'#POWEROn
Poweron:
   Print "taste: " ; Adresse
   Print "poweron" ; Poweron
   If Adresse = 159 And Poweron = 0 Then
      'Gosub speichern
      'Poweron = 0
      Print "schlafen gehen"
      Mcucr.isc01 = 0                                       'umschalten von Falling auf Low Level
      Power Powersave
   Elseif Adresse = 31 And Poweron = 1 Then
      'Gosub laden
      'Poweron = 0
      Mcucr.isc01 = 1                                       'umschalten von Low Level auf Falling
      Print "wurde angeschaltet"                            'wieder schlafen gehen
   End If
Return

'#Klatschschalter
Klatsch:
   If Klatsche = 1 Then
      Incr Klatschctr
   End If

   If Klatschctr > 2 Then
      Klatschctr = 0
   Elseif Klatschctr = 2 Then
      Klatsch = 1
   Else
      Klatsch = 0
   End If
Return

$data
'COLOUR Table-------------------------------------------------------------------
        '1     2      3    4     5     6     7     8     9     10    11    12    13    14    15    16
         'red, hred, or,  hor,   ye ,  gr ,  hgr, tuer, hbl,  hhbl,  bl,  ddpu, dpu,   pu,   hpu,  wh
Redtable:
   Data 064 , 025 , 064 , 064 , 064 , 000 , 050 , 021 , 034 , 000 , 000 , 000 , 018 , 027 , 031 , 064
Greentable:
   Data 000 , 023 , 036 , 034 , 064 , 064 , 064 , 064 , 051 , 034 , 000 , 000 , 015 , 023 , 026 , 064
Bluetable:
   Data 000 , 023 , 000 , 000 , 000 , 000 , 028 , 040 , 058 , 034 , 064 , 035 , 035 , 051 , 060 , 064
 
Hallo Bonze,
hast du denn zunächst mal versucht, den Controller über einen Taster an INT0 wieder aufzuwecken? Wenn so viele Fehlermöglichkeiten sind, dann solltest du erst mal was einfaches versuchen.
Außerdem würde ich nicht eine Variable und ein Sub gleich benennen (Poweron).

HBA
 
da haste wohl recht, werd dann wohl mal das schlafen/aufwecken alleine testen müssen,. hab ich jamit sonst den programmteilen auch gemacht...
 
Eine Sache noch. Ist das hier richtig?

Code:
      Select Case Adresse
...
         Case 31:                                           '#on
                  Ausgabestring = "on"
                  Poweron = 1
...
      End Select
      If Poweron = 0 Then
         Gosub Poweron
      End If

Der geht bei "on" doch gar nicht in die Sub!

HBA
 
ne is nich richtig, hatte ich aber schon wieder geändert
was andres, benutze ja das pollin Board, jetzt ists so das ich da garkeinen Taster benutzen kann , da sonst meine Fb nicht mehr geht, bzw meine Signale werden glaube ich auf Low gezogen und somit erkennt mein Mega die Tasten nich mehr,.
 
Ich verstehe nicht, was du damit meinst. Du brauchst doch keine FB, wenn du es mit dem Taster probieren willst.
Hast du das Pollin Evaluationsboard, mit mehreren Steckplätze für verschiedene Controller?

HBA
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)