- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Ausgang mit 36khz modulieren. Wie?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    53
    Beiträge
    765
    Ich arbeite mit der Schaltung vorn Lochraster.org. Da gibt es beim Punkt Etherrape nen Schaltplan mit einem optionalen IR-Sender. Diese Schaltung erzeugt bei mir die 36kHz.

    Das eine Const anders reagiert als eine Variable liegt daran, dass bei einer Variable die Zeit gestreckt wird. Bei einer Const wird Bitlaenge vom Compiler gegen einen festen Wert getauscht.

    Const Bitlänge = 600
    waitus Bitlänge
    wird zu
    warte 600 us

    Dim Vari as word
    vari = 600
    waitus vari
    wird zu
    Hole Wert aus der Speicheradresse Vari, warte vari us
    also musst du die Zeit (Takte), welche der Controller braucht um Vari auszulesen, vorher schon abziehen.
    Vari = 600 - Variholzeit
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    361
    Ich habe das ganze jetzt etwas umständlich (codeintensiv) aber dafür sehr genau arbeitend gelöst. Bitlänge und Modulationsfrequenz sind nun auch im Code-String enthalten. Ich kann so nun jeden IR Code von jeder Fernbedienung senden. Das ganze ist Teil meies Haussteuerungsprojektes. Ich kann nun von unterwegs Geräte daheim per Funk und IR Aussendung bedienen.

    Da die wenigsten Fernbedienungen mit dem von Bascom unterstützten RC5 Protokoll funktionieren, kann dieser Code vielleicht auch für andere, die an ähnlichen Projekten arbeiten mal hilfreich sein.

    Hier mein fertiger Code:

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 200
    $swstack = 200
    $framesize = 200
    
    Config Portb.1 = Output
    Config Pinb.0 = Input
    Taster Alias Pinb.0
    Irled Alias Portb.1
    Portb.0 = 1                                                 'pullup'
    
    Dim Pwmwert As Word
    Dim L As Byte
    Dim H As Byte
    Dim Code As String * 120 , Stellenzaehler As Byte , Bitwert_str As String * 1 , A As Byte , Bitlaenge As Word , Bitlaenge_str As String * 3
    Dim Khz As Word , Khz_str As String * 3
    L = 0
    H = 1
    Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1
    Pwmwert = 104                                               ' 110=36khz, 104=38Khz, 99=40Khz (wert im code string enthalten)
    
    Do
    Debounce Taster , 0 , Sendecodeklimaanlage , Sub
    Loop
    
    Sendecodeklimaanlage:
    Code = "386001111111111111110000000101010101010010101001001001001001010010010100101010101010100101001001001001001001"       'stelle 1-2 modulation in khz, stelle 3-5 bitlänge in us
    Gosub Auswertung
    Return
    
    Satcodelauter:
    Code = "3685011001100110101010011001011"                    'stelle 1-2 modulation in khz, stelle 3-5 bitlänge in us
    Gosub Auswertung
    Return
    
    Fernseherleiser:
    Code = "38600111111100000001001001001010101010100100100101010101010010010100101010101010100101001001001001"       'stelle 1-2 modulation in khz, stelle 3-5 bitlänge in us
    Gosub Auswertung
    Return
    
    Auswertung:
    Khz_str = Mid(code , 1 , 2)                                 'holt die modulationsfrequenz aus dem string (36,38 oder 40 Khz)
    Khz = Val(khz_str)
    Select Case Khz
    Case 36
    Pwmwert = 110
    Case 38
    Pwmwert = 104
    Case 34
    Pwmwert = 99
    Case Else                                                   'wenn wert unbekannt dann 38 Khz
    Pwmwert = 104
    End Select
    Compare1a = Pwmwert
    Bitlaenge_str = Mid(code , 3 , 3)                           'holt die bitlänge aus dem string
    Bitlaenge = Val(bitlaenge_str)
    Stellenzaehler = Len(code) + 5
    For A = 6 To Stellenzaehler                                 'von selle 6 weg die bits des sendecodes lesen und senden
    Bitwert_str = Mid(code , A , 1)
    Select Case Bitwert_str
    Case "1"
    Gosub Sendehigh
    Case "0"
    Gosub Sendelow
    End Select
    Next A
    Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1       'am ende einer codeaussendung "disconnect" pwm damit die sendeled niemals an bleiben kann
    Return
    
    Sendehigh:
    Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1       'nur bei einem "high" die pulswellenausgabe aktivieren
    Gosub Wartezeitbitlaenge                                    'variable wartezeit = bitlänge
    Return
    
    Sendelow:
    Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1       'bei einem "low" erfolgt keine pwm ausgabe
    Gosub Wartezeitbitlaenge                                    'variable wartezeit = bitlänge
    Return
    
    Wartezeitbitlaenge:                                         'waitus führt mit einer variablen zu starken abweichungen (auch mit 16Mhz takt), darum diese umständliche (aber genaue) lösung
    Select Case Bitlaenge                                       'bitlänge: 850us technisat, 600us klimaanlage
    Case 550
    Waitus 550
    Case 560
    Waitus 560
    Case 570
    Waitus 570
    Case 580
    Waitus 580
    Case 590
    Waitus 590
    Case 600
    Waitus 600
    Case 610
    Waitus 610
    Case 620
    Waitus 620
    Case 630
    Waitus 630
    Case 640
    Waitus 640
    Case 650
    Waitus 650
    Case 660
    Waitus 660
    Case 670
    Waitus 670
    Case 680
    Waitus 680
    Case 690
    Waitus 690
    Case 700
    Waitus 700
    Case 710
    Waitus 710
    Case 720
    Waitus 720
    Case 730
    Waitus 730
    Case 740
    Waitus 740
    Case 750
    Waitus 750
    Case 760
    Waitus 760
    Case 770
    Waitus 770
    Case 780
    Waitus 780
    Case 790
    Waitus 790
    Case 800
    Waitus 800
    Case 810
    Waitus 810
    Case 820
    Waitus 820
    Case 830
    Waitus 830
    Case 840
    Waitus 840
    Case 850
    Waitus 850
    Case 860
    Waitus 860
    Case 870
    Waitus 870
    Case 880
    Waitus 880
    Case 890
    Waitus 890
    Case 900
    Waitus 900
    Case 910
    Waitus 910
    Case 920
    Waitus 920
    Case 930
    Waitus 930
    Case 940
    Waitus 940
    Case 950
    End Select
    Return
     
    End
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

Ähnliche Themen

  1. PWM Ausgang ansteuern - wie?
    Von Barthimaeus im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 07.11.2007, 14:35
  2. 36 kHz modulieren mit Bascom
    Von adrisch im Forum Asuro
    Antworten: 5
    Letzter Beitrag: 30.06.2007, 16:50
  3. serout wie mit 36khz modulieren
    Von alper im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 03.05.2007, 22:16
  4. HFS301 mit Ton modulieren???
    Von elcomportal im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 24.02.2007, 12:28
  5. Hochspannung mit Hochfrequenz modulieren
    Von cydodon im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 17.10.2005, 11:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen