-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Code läuft nicht feherfrei, bitte um Hilfe! Input Capture und UART nicht gleichzeitig

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360

    Code läuft nicht feherfrei, bitte um Hilfe! Input Capture und UART nicht gleichzeitig

    Anzeige

    Ich habe Probleme über den Input Capture ICP einen Funkempfänger auszuwerten und mir das Ergebnis über den UART ausgeben zu lassen.
    Gleichzeitig möchte ich alles was am UART über ein Terminal reinkommt auch 1:1 wieder ausgeben.

    Einzeln klappt sowohl die Ausgabe des Funkmoduls so wie auch die Rückgabe von am Terminal eingegeben "Texten". Mein Funkempfänger am Input Capture spuckt mir die richtigen Werte über Print #2 aus und auch der UART sendet alle Eingaben vom Terminal 1:1 korrekt zurück. Ich bekomme es nur NICHT gleichzeitig zum laufen!

    Sobald ich aus der Hauptschleife "Gosub Empfang868mhz" rausnehme bekomme ich alle Terminal Eingaben korrekt zurück.
    Füge ich es wieder ein, empfange ich nur noch die Funkbefehle vom Input Capture und das Terminal sendet nach Eingabe von Enter ins leere (ich bekomme dann die Eingabe bei "Print #2, UART2eingang" nicht mehr zurück und weiß nicht warum.

    Woran kann das liegen? Verträgt sich der Input Capture mit dem UART aus irgend einem Grund nicht? Manchmal wird mir nach der Ausgabe des Funkempfanges ein zuvor eingegebener Text über das Terminal sehrwohl mit ausgegeben (aber selten und auch nur zufällig leider). Bin am Ende meiner Weisheit und bitte um Hilfe. Hab den Code stark reduziert und nur die relevanten Teile gepostet.

    Code:
     
    
    $regfile = "m128def.dat"
    $crystal = 8000000
    $baud = 9600
    $framesize = 550
    $swstack = 550
    $hwstack = 550
    
    
    
    
    Config Pind.4 = Input                                       '868Mhz Input, direkt vom Empfänger.
    Config Portd.5 = Output                                     'Enable 868Mhz Empfänger'
    Config Porte.7 = Output                                     'led gelb led1'
    Config Porte.6 = Output                                     'led grün led2'
    Config Porte.5 = Output                                     'led rot led3'
    Config Porte.4 = Output                                     'led blau led4'
    Config Porta.0 = Output                                     '433Mhz Sender'
    Config Portb.7 = Output                                     '868Mhz sender'
    Config Portb.6 = Output                                     'Enable 868Mhz Sender'
    Config Portb.5 = Output                                     'Speaker'
    Config Portc.7 = Output                                     'LAN Modul Reset'
    Config Portd.6 = Output                                     'LAN Modul Config'
    
    
    Funkpinit Alias Porta.0                                     '433Mhz Sender'
    Funkpinfs20 Alias Portb.7                                   '868Mhz Sender'
    Enablefs20tx Alias Portb.6                                  '868Mhz Sendefreigabe Enable'
    Enablefs20rx Alias Portd.5                                  '868Mhz Empfängerfreigabe Enable'
    Icp1 Alias Pind.4                                           '868Mhz Input, direkt vom Empfänger.
    Led Alias Porte.7                                           'gelbe LED'
    Ledgruen Alias Porte.6                                      'grüne LED'
    Ledrot Alias Porte.5                                        'rote LED'
    Ledblau Alias Porte.4                                       'blaue LED'
    Speaker Alias Portb.5                                       'Piezo'
    Lanreset Alias Portc.7                                      'LAN Modul Reset'
    Lanconfig Alias Portd.6                                     'LAN Modul Config'
    
    
    Config Sda = Portd.1                                        'DS1307'
    Config Scl = Portd.0
    I2cinit
    Config Twi = 100000
    Waitms 100
    Dim Ds1307w As Byte , Ds1307r As Byte : Ds1307w = &B11010000 : Ds1307r = &B11010001
    
    
    Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Serialin1 = Buffered , Size = 150
    Config Serialout1 = Buffered , Size = 150
    Open "Com2:" For Binary As #2                               'UART 2 wird aktiviert. Schicken mit Print #2 , "text"'
    Clear Serialin1
    Enable Interrupts
    Waitms 100
    
    
    Dim Buffer As Byte , UART2eingang As String * 152
    
    
    Dim _weekday As Integer
    Dim _wochentag As String * 2 , _day As Byte , _month As Byte , _monat As String * 3 , _year As Byte , _sec As Integer , _min As Integer , _hour As Integer
    Dim Sec_str As String * 2 , Min_str As String * 2 , Hour_str As String * 2 , Day_str As String * 2 , Year_str As String * 2       'Variablen für mehrtsellige Ausgabe'
    
    
    
    
    
    
    'Timer1: resolution = 1ms
    Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising       'bei 8Mhz Quarz'
    Timer1 = 0
    
    
    On Icp1 Icp_int                                             'Input Capture an dem das 868Mhz Funkmodul betrieben wird'
    Enable Icp1
    
    
    Wait 3                                                      'Wartezeit bis LAN Modul bereit ist'
    
    
    
    
    Print #2 , "Programm start"
    Waitms 200
    Gosub Speakersound
    Waitms 200
    Gosub Speakersound
    
    
    
    
    '#####################  Hauptschleife  #######################'
    
    
    Hauptschleife:
    Do
    If Ischarwaiting(#2) = 1 Then                               'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
    Gosub UART2auswertung
    End If
    Gosub Empfang868mhz                                         'Gehe zum 868Mhz Funkempfang'
    Loop
    
    
    '##############  UART Auswertung  ###############'
    
    
    UART2auswertung:                                            'Zeichen werden zusammengesetzt und bei 13 ausgewertet'
    Disable Interrupts
    Buffer = Inkey(#2)
    If Buffer >= 13 Then
    If Buffer = 13 Then
    Gosub Auswertung
    Else
    If Len(uart2eingang) < 149 Then
    UART2eingang = UART2eingang + Chr(buffer)
    Else
    UART2eingang = ""
    Clear Serialin1
    End If
    End If
    End If
    Enable Interrupts
    Return
    
    
    Auswertung:
    Print #2 , UART2eingang                                     'Gebe alles 1:1 aus was am UART reingekommen ist zum Test'
    Gosub Uhrzeitlesen
    Print #2 , Hour_str ; ":" ; Min_str ; ":" ; Sec_str         'Zeitstempel ebenso ausgeben'
    UART2eingang = ""
    Clear Serialin1
    Return
    
    
    '####################   Input Capture 868Mhz Empfänger   #############################'
    
    
    Icp_int:
    Fs20cycle1 = Timer1
    Timer1 = 0
    Select Case Fs20cycle1
       Case Is < 599                                            'below 600µs, reset bitcounter
       Count1 = 1
       Case 600 To 1000                                         '600-1000µs, 0-bit
       Rxbit1 = 0
       Rdy1 = 1
       Case 1001 To 1400                                        '1000-1400µs, 1-bit
       Rxbit1 = 1
       Rdy1 = 1
       Case Is > 1401                                           'over 1400µs, reset bitcounter
       Count1 = 1
    End Select
    Return
    
    
    '####################   Funk Empfang 868Mhz   #############################'
    
    
    Empfang868mhz:
    'Hier findet die Auswertung vom Input Capture ICP1 statt und wird der Variablen "Gesamtcode" übergeben'
    'Der Code ist umfangreich, mehrfach getestet und funktioniert. Habe ihn entfernt damit der Code fürs Forum nicht zu Umfangreich wird'
    
    
    Gosub Speakersound
    Print #2 , Gesamtcode1                                      'Alles was über 868Mhz empfangen wird, wird hier ausgegeben zum Test'
    Waitms 100
    Return
    
    
    
    
    
    
    '#####################################  DS1307  ######################################'
    
    
    Datumschreiben:
     _day = 31 : _month = 05 : _year = 13
    Uhrzeitschreiben:
    _sec = 00 : _min = 13 : _hour = 23
    Gosub Uhrumrechnung
    _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
    I2cstart : I2cwbyte Ds1307w : I2cwbyte 0 : I2cwbyte _sec : I2cwbyte _min : I2cwbyte _hour : I2cstop : I2cstart : I2cwbyte Ds1307w
    I2cwbyte 3 : I2cwbyte _weekday : I2cwbyte _day : I2cwbyte _month : I2cwbyte _year : I2cstop
    _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
    Return
    
    
    Uhrzeitlesen:                                               'Lese Zeit und Datum aus dem DS1307'
    I2cstart
    I2cwbyte Ds1307w : I2cwbyte 0 : I2cstop : I2cstart : I2cwbyte Ds1307r : I2crbyte _sec , Ack : I2crbyte _min , Ack : I2crbyte _hour , Ack
    I2crbyte _weekday , Ack : I2crbyte _day , Ack : I2crbyte _month , Ack : I2crbyte _year , Nack : I2cstop
    _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
    Gosub Uhrumrechnung
    Return
    
    
    Uhrumrechnung:
    Select Case _weekday
    Case Is = 1 : _wochentag = "Mo"
    Case Is = 2 : _wochentag = "Di"
    Case Is = 3 : _wochentag = "Mi"
    Case Is = 4 : _wochentag = "Do"
    Case Is = 5 : _wochentag = "Fr"
    Case Is = 6 : _wochentag = "Sa"
    Case Is = 7 : _wochentag = "So"
    End Select
    Select Case _month
    Case Is = 1 : _monat = "Jan"
    Case Is = 2 : _monat = "Feb"
    Case Is = 3 : _monat = "Mar"
    Case Is = 4 : _monat = "Apr"
    Case Is = 5 : _monat = "Mai"
    Case Is = 6 : _monat = "Jun"
    Case Is = 7 : _monat = "Jul"
    Case Is = 8 : _monat = "Aug"
    Case Is = 9 : _monat = "Sep"
    Case Is = 10 : _monat = "Okt"
    Case Is = 11 : _monat = "Nov"
    Case Is = 12 : _monat = "Dez"
    End Select
    Sec_str = Str(_sec)                                         '2-stellig'
    Sec_str = Format(sec_str , "00")
    Min_str = Str(_min)
    Min_str = Format(min_str , "00")
    Hour_str = Str(_hour)
    Hour_str = Format(hour_str , "00")
    Day_str = Str(_day)
    Day_str = Format(day_str , "00")
    Year_str = Str(_year)
    Year_str = Format(year_str , "00")
    Return
    
    
    '##################################  Sound  ##################################'
    
    
    Speakersound:
    Sound Speaker , 25 , 300
    Return
    
    
    
    
    End
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Bevor ich mich da reinsteigere, bist du sicher, dass du alles wichtige in deinem gekürzten Code drin hast? Mir fehlt das:

    Code:
    Dim Fs20cycle1 As Word
    Dim Count1 As Byte
    Dim Rdy1 As Byte
    Dim Rxbit1 As Byte
    Dim Gesamtcode1 As Word
    um den Code fehlerfrei zu übersetzen und bei "Case irgendetwas" sollte ein : am Ende stehen, oder?

    Code:
    Select Case Fs20cycle1
       Case Is < 599:                       'below 600µs, reset bitcounter
       Count1 = 1
       Case 600 To 1000:                    '600-1000µs, 0-bit
       Rxbit1 = 0
       Rdy1 = 1
       Case 1001 To 1400:                   '1000-1400µs, 1-bit
       Rxbit1 = 1
       Rdy1 = 1
       Case Is > 1401:                      'over 1400µs, reset bitcounter
       Count1 = 1
    End Select
    Gruß

    mic

    P.S.: Anstelle vom Speakersound würde ich bauchgefühlsmäßig besser Leds setzen/löschen.
    Geändert von radbruch (02.06.2013 um 21:42 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Lauffähig ist der Code nicht. Die ganzen DIM's habe ich rausgeschmissen damit man nicht soviel zu lesen hat. Damit passt auch alles weil die einzelnen Programmteile ja toll laufen. Es läuft eben leider nur nie der UART und der Input Capture zur selben Zeit. Hatte gehofft dafür gibts ne einfache Erklärung (die ich nicht kenne). Habe es mit ":" versucht am Ende des Casebefehls, brachte leider nichts (es funktioniert mit und ohne ":"). Dieser Teil funktioniert auch perfekt nur eben nicht zusammen mit dem UART. Es gibt da irgend ein Timingproblem, die einzelnen Codeteile laufen toll (einzeln).
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Oki, es wird aber etwas dauern bis ich mich da eingelesen habe.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Nun also endlich der erste Versuch: Bei 9600 Baud werden 150 Zeichen in 1 Sek. / 9600 * 150 oder 0,0156 Sekunden übertragen, weniger Zeichen entsprechend noch schneller. Mit

    Code:
    If Ischarwaiting(#2) = 1 Then                               'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
    Gosub UART2auswertung
    End If
    wird allerdings nur das erste Zeichen abgespeichert. Alle anderen werden "verschluckt", weil das Programm mit

    Code:
    Gosub Empfang868mhz                                         'Gehe zum 868Mhz Funkempfang'
    beschäftigt ist. Ich hoffe, das ist's.

    Gruß

    mic
    Geändert von radbruch (03.06.2013 um 18:25 Uhr) Grund: Rechtschreibung

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Danke für deine Hilfe! Ja das könnte sein. Sobald ich "Gosub Empfang868mhz" entferne, läuft der UART einwandfrei und alle Eingaben übers Terminal kommen sofort zurück wie es sein soll. Ich befürchte, dass ich einen eigenen "kleinen" Mikrocontroller für das Empfangsmodul brauchen werde. Dieses übernimmt dann die Input Capture Auswertung und sobald da ein Funkcode im bekannten Format angekommen ist geht ein Port von 0 auf 1. Mein Hauptmikrocontroller sieht wenn er nichts zu tun hat immer nach ob dieser Port auf 1 ist. Wenn ja geht ein anderer Port von 0 auf 1 (Code wird angefordert) und der Funkcode wird nun seriell rüber gesendet. Das wird wohl die stressfreiste Möglichkeit sein. Am Ausgang des Funkmoduls liegt halt rauschen an und drum wird der Input Capture dadurch ziemlich "befeuert" vermute ich. Falls noch jemand weiß wie ich das ohne einen zweiten Mikrocontroller lösen kann, wäre ich sehr dankbar. Bin mir ziemlich sicher, dass es eine Lösung gibt, nur leider kenne ich sie nicht. Das ist nur ne Timingsache und sollte doch irgendwie zu lösen sein.
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Vielleicht funktioniert es so:

    Code:
    Do
       If Ischarwaiting(#2) = 1 Then        'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
          Input UART2eingang Noecho
          Gosub Auswertung
       End If
       Gosub Empfang868mhz                  'Gehe zum 868Mhz Funkempfang'
    Loop

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    Bascom spuckt mir da eine Fehlermeldung (Invalid datatype) aus in der Zeile "Input UART2eingang Noecho".
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Bei meiner Demo 1.11.9.8 funktioniert das kompilieren anstandslos:

    Code:
    $regfile = "m128def.dat"
    $crystal = 8000000
    $baud = 9600
    $framesize = 550
    $swstack = 550
    $hwstack = 550
    
    
    Config Pind.4 = Input                                       '868Mhz Input, direkt vom Empfänger.
    Config Portd.5 = Output                                     'Enable 868Mhz Empfänger'
    Config Porte.7 = Output                                     'led gelb led1'
    Config Porte.6 = Output                                     'led grün led2'
    Config Porte.5 = Output                                     'led rot led3'
    Config Porte.4 = Output                                     'led blau led4'
    Config Porta.0 = Output                                     '433Mhz Sender'
    Config Portb.7 = Output                                     '868Mhz sender'
    Config Portb.6 = Output                                     'Enable 868Mhz Sender'
    Config Portb.5 = Output                                     'Speaker'
    Config Portc.7 = Output                                     'LAN Modul Reset'
    Config Portd.6 = Output                                     'LAN Modul Config'
    
    
    Funkpinit Alias Porta.0                                     '433Mhz Sender'
    Funkpinfs20 Alias Portb.7                                   '868Mhz Sender'
    Enablefs20tx Alias Portb.6                                  '868Mhz Sendefreigabe Enable'
    Enablefs20rx Alias Portd.5                                  '868Mhz Empfängerfreigabe Enable'
    Icp1 Alias Pind.4                                           '868Mhz Input, direkt vom Empfänger.
    Led Alias Porte.7                                           'gelbe LED'
    Ledgruen Alias Porte.6                                      'grüne LED'
    Ledrot Alias Porte.5                                        'rote LED'
    Ledblau Alias Porte.4                                       'blaue LED'
    Speaker Alias Portb.5                                       'Piezo'
    Lanreset Alias Portc.7                                      'LAN Modul Reset'
    Lanconfig Alias Portd.6                                     'LAN Modul Config'
    
    
    Config Sda = Portd.1                                        'DS1307'
    Config Scl = Portd.0
    I2cinit
    Config Twi = 100000
    Waitms 100
    Dim Ds1307w As Byte , Ds1307r As Byte : Ds1307w = &B11010000 : Ds1307r = &B11010001
    
    
    Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Serialin1 = Buffered , Size = 150
    Config Serialout1 = Buffered , Size = 150
    Open "Com2:" For Binary As #2                               'UART 2 wird aktiviert. Schicken mit Print #2 , "text"'
    Clear Serialin1
    Enable Interrupts
    Waitms 100
    
    
    Dim Buffer As Byte , UART2eingang As String * 152
    
    
    Dim _weekday As Integer
    Dim _wochentag As String * 2 , _day As Byte , _month As Byte , _monat As String * 3 , _year As Byte , _sec As Integer , _min As Integer , _hour As Integer
    Dim Sec_str As String * 2 , Min_str As String * 2 , Hour_str As String * 2 , Day_str As String * 2 , Year_str As String * 2       'Variablen für mehrtsellige Ausgabe'
    
    Dim Fs20cycle1 As Word
    Dim Count1 As Byte
    Dim Rdy1 As Byte
    Dim Rxbit1 As Byte
    Dim Gesamtcode1 As Word
    
    'Timer1: resolution = 1ms
    Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising       'bei 8Mhz Quarz'
    Timer1 = 0
    
    
    On Icp1 Icp_int                                             'Input Capture an dem das 868Mhz Funkmodul betrieben wird'
    Enable Icp1
    
    
    Wait 3                                                      'Wartezeit bis LAN Modul bereit ist'
    
    
    
    
    Print #2 , "Programm start"
    Waitms 200
    Gosub Speakersound
    Waitms 200
    Gosub Speakersound
    
    
    
    
    Hauptschleife:
    Do
       If Ischarwaiting(#2) = 1 Then        'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
          Input UART2eingang Noecho
          Gosub Auswertung
       End If
       Gosub Empfang868mhz                  'Gehe zum 868Mhz Funkempfang'
    Loop
    
    
    '##############  UART Auswertung  ###############'
    
    
    UART2auswertung:                                            'Zeichen werden zusammengesetzt und bei 13 ausgewertet'
    Disable Interrupts
    Buffer = Inkey(#2)
    If Buffer >= 13 Then
    If Buffer = 13 Then
    Gosub Auswertung
    Else
    If Len(uart2eingang) < 149 Then
    UART2eingang = UART2eingang + Chr(buffer)
    Else
    UART2eingang = ""
    Clear Serialin1
    End If
    End If
    End If
    Enable Interrupts
    Return
    
    
    Auswertung:
    Print #2 , UART2eingang                                     'Gebe alles 1:1 aus was am UART reingekommen ist zum Test'
    Gosub Uhrzeitlesen
    Print #2 , Hour_str ; ":" ; Min_str ; ":" ; Sec_str         'Zeitstempel ebenso ausgeben'
    UART2eingang = ""
    Clear Serialin1
    Return
    
    
    '####################   Input Capture 868Mhz Empfänger   #############################'
    
    
    Icp_int:
    Fs20cycle1 = Timer1
    Timer1 = 0
    Select Case Fs20cycle1
       Case Is < 599:                       'below 600µs, reset bitcounter
       Count1 = 1
       Case 600 To 1000:                    '600-1000µs, 0-bit
       Rxbit1 = 0
       Rdy1 = 1
       Case 1001 To 1400:                   '1000-1400µs, 1-bit
       Rxbit1 = 1
       Rdy1 = 1
       Case Is > 1401:                      'over 1400µs, reset bitcounter
       Count1 = 1
    End Select
    Return
    
    
    '####################   Funk Empfang 868Mhz   #############################'
    
    
    Empfang868mhz:
    'Hier findet die Auswertung vom Input Capture ICP1 statt und wird der Variablen "Gesamtcode" übergeben'
    'Der Code ist umfangreich, mehrfach getestet und funktioniert. Habe ihn entfernt damit der Code fürs Forum nicht zu Umfangreich wird'
    
    
    Gosub Speakersound
    Print #2 , Gesamtcode1                                      'Alles was über 868Mhz empfangen wird, wird hier ausgegeben zum Test'
    Waitms 100
    Return
    
    
    
    
    
    
    '#####################################  DS1307  ######################################'
    
    
    Datumschreiben:
     _day = 31 : _month = 05 : _year = 13
    Uhrzeitschreiben:
    _sec = 00 : _min = 13 : _hour = 23
    Gosub Uhrumrechnung
    _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
    I2cstart : I2cwbyte Ds1307w : I2cwbyte 0 : I2cwbyte _sec : I2cwbyte _min : I2cwbyte _hour : I2cstop : I2cstart : I2cwbyte Ds1307w
    I2cwbyte 3 : I2cwbyte _weekday : I2cwbyte _day : I2cwbyte _month : I2cwbyte _year : I2cstop
    _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
    Return
    
    
    Uhrzeitlesen:                                               'Lese Zeit und Datum aus dem DS1307'
    I2cstart
    I2cwbyte Ds1307w : I2cwbyte 0 : I2cstop : I2cstart : I2cwbyte Ds1307r : I2crbyte _sec , Ack : I2crbyte _min , Ack : I2crbyte _hour , Ack
    I2crbyte _weekday , Ack : I2crbyte _day , Ack : I2crbyte _month , Ack : I2crbyte _year , Nack : I2cstop
    _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
    Gosub Uhrumrechnung
    Return
    
    
    Uhrumrechnung:
    Select Case _weekday
    Case Is = 1 : _wochentag = "Mo"
    Case Is = 2 : _wochentag = "Di"
    Case Is = 3 : _wochentag = "Mi"
    Case Is = 4 : _wochentag = "Do"
    Case Is = 5 : _wochentag = "Fr"
    Case Is = 6 : _wochentag = "Sa"
    Case Is = 7 : _wochentag = "So"
    End Select
    Select Case _month
    Case Is = 1 : _monat = "Jan"
    Case Is = 2 : _monat = "Feb"
    Case Is = 3 : _monat = "Mar"
    Case Is = 4 : _monat = "Apr"
    Case Is = 5 : _monat = "Mai"
    Case Is = 6 : _monat = "Jun"
    Case Is = 7 : _monat = "Jul"
    Case Is = 8 : _monat = "Aug"
    Case Is = 9 : _monat = "Sep"
    Case Is = 10 : _monat = "Okt"
    Case Is = 11 : _monat = "Nov"
    Case Is = 12 : _monat = "Dez"
    End Select
    Sec_str = Str(_sec)                                         '2-stellig'
    Sec_str = Format(sec_str , "00")
    Min_str = Str(_min)
    Min_str = Format(min_str , "00")
    Hour_str = Str(_hour)
    Hour_str = Format(hour_str , "00")
    Day_str = Str(_day)
    Day_str = Format(day_str , "00")
    Year_str = Str(_year)
    Year_str = Format(year_str , "00")
    Return
    
    
    '##################################  Sound  ##################################'
    
    
    Speakersound:
    Sound Speaker , 25 , 300
    Return
    
    
    
    
    End

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    War mein Fehler, konnte es nun kompilieren aber leider tut sich nun garnichts mehr. Weder das Funkmodul liefert was noch der UART.
    ----------------------------------------------------------------------------------------
    Je tiefer die Sonne der Kunst sinkt, umso grössere Schatten werfen Zwerge!!

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Timer0 und UART Lib Fleury Timer läuft nicht mehr los
    Von gesamtplan im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 21.03.2011, 19:23
  2. UART macht probleme!!! Einfaches testprog läuft nicht
    Von hunni im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 21.08.2009, 20:03
  3. [läuft+Code] Servotest an ATtiny13 läuft nicht
    Von oberallgeier im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 18.10.2007, 17:49
  4. UART Interrupts Input geht nicht
    Von lanic im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 15.03.2006, 16:50
  5. Antworten: 3
    Letzter Beitrag: 15.08.2005, 17:41

Berechtigungen

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