logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom][atmega32]Problem w komunikacji avr >> sl45

dark_ghost 06 Lip 2010 19:34 1620 7
  • #1 8267237
    dark_ghost
    Poziom 10  
    Witam, mam problem z SL45i. połączenie jak na obrazku i nic się nie dzieje. (napięcie obniżone tylko na TXuc>>RXtel). Tel nawet nie mignie.

    [bascom][atmega32]Problem w komunikacji avr >> sl45

    $regfile = "m32def.dat"
    $crystal = 8000000
    
    
    $Baud = 19200
    Config Serialin = Buffered , Size = 200
    
    Dim Kod As Byte
    Dim Bufor As Byte
    Config Porta = Output                                       'cały port a jako wyjście
    Porta = &B00000000
    Do
    
    
    Print "ATE0" ; Chr(13)
    
    Porta.0 = 1
    
    Print "ATD669123609;" ; Chr(13)                             'zamiast 777777777 to moj tel podalem na ktory ma dzwnonic
    Porta.1 = 1
    Wait 15
    
    Print "ATH" ; Chr(13)
    Porta.2 = 1
    Wait 1
    Gosub Oproznij_bufor
    
    
    Loop
    End
    
    
    
    Oproznij_bufor:               'Opróżnia bufor z odpowiedzi telefonu
    
       Do
          Kod = Inkey()
          Bufor = Ischarwaiting()
       Loop Until Bufor = 0
    


    Zauważyłem że staje na

    na jakies 2 minuty
  • #2 8267381
    janbernat
    Poziom 38  
    15s x8= 120s = 2min.
    Wszystko się zgadza.
    Masz pewnie ustawiony internal RC oscilator na 1MHz.
    i tak wpisz- $crystal = 1000000
    Ale dla $Baud = 19200 jest wtedy błąd >7%- nie będzie działać.
    Dla 8MHz będzie dobrze- ale trzeba przestawić fusebity.
    Aż strach poradzić jak- bo można zablokować procesor.
  • #3 8267536
    dark_ghost
    Poziom 10  
    Czyli jaka rada? :) bo zaczynam się martwić że sobie nie poradzę.
  • Pomocny post
    #4 8267675
    janbernat
    Poziom 38  
    Czyli -bardzo ostrożnie z naciskaniem potwierdzenia.
    Myśleć długo.
    Zanim naciśniesz.
    W zakładce program->send to chip-> manual program-> wciskasz "lock and fusebits".
    Szukasz "int. rc osc 8MHz"
    I to wciskasz po głębokim namyśle i wątpliwościach.
    Tych opcji jest kilka- wybierasz z max start time+64us.
    Ale nie mam podłączonej ATtiny26.
    Tak że to tylko wskazówka- nie odkupię Ci zablokowanej przypadkiem ATtiny26.
    Na własną odpowiedzialność to robisz.
    P.S.
    Kurde- to jest ATmega 32!
  • #5 8268222
    dark_ghost
    Poziom 10  
    Udało się, działa :D ehh jaki jestem szczęśliwy :D

    Tylko teraz kolejne pytanie. Chciał bym żeby program dzwonił po naciśnięciu przycisku. A teraz jest tak że po naciśnięciu przycisku program nie dzwoni. Mam kod taki:
    
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    
    $Baud = 19200
    Config Serialin = Buffered , Size = 200
    
    Dim Kod As Byte
    Dim Bufor As Byte
    Config Porta = Output                                       'cały port a jako wyjścia                                      
    Porta = &B00000000
    Config Portc = Input                                        'port c  jako wejścia
    Portc = &B00000000                                          'wszędzie stan spoczynkowy-0
    Do
    Porta.6 = 1
        Wait 10
    If Pinc.0 = 0 Then                                          'jeżeli przycisk 1 jest wciśnięty
    
    
    Print "ATE0" ; Chr(13)
    
    Porta.0 = 1
    
    Print "ATD669123609;" ; Chr(13)                             'zamiast 777777777 to moj tel podalem na ktory ma dzwnonic
    Porta.1 = 1
    Wait 15
    
    Print "ATH" ; Chr(13)
    Porta.2 = 1
    Wait 10
    Gosub Oproznij_bufor
      Porta.0 = 0
      Porta.1 = 0
      Porta.2 = 0
    
      End If
    Loop
    End
    
    
    
    Oproznij_bufor:               'Opróżnia bufor z odpowiedzi telefonu
    
       Do
          Kod = Inkey()
          Bufor = Ischarwaiting()
       Loop Until Bufor = 0
    
  • #6 8271071
    janbernat
    Poziom 38  
    Na początek mam trzy wiadomości.
    Dwie złe i jedną taką sobie.
    1.Nie znam się na sterowaniu telefonów- może ktoś inny pomoże.
    2.Znowu fusebity- PORTC jest ustawiony do obsługi JTAG- trzeba to wyłączyć.
    Wchodzisz w ustawianie fusebitów- tak jak poprzednio.
    Szukasz Fusebit High H - i ustawiasz na disable.
    3.Skoro skonfigurowałeś PORTC jako wejście- to nie ma stanu spoczynkowego.

    Config Portc = Input 'port c jako wejścia
    Portc = &B00000000 'wszędzie stan spoczynkowy-0

    To ustawienie powoduje brak podciągania do zasilania- wejście "wisi" w powietrzu i możesz sobie przyciskać do ukojenia.
    Powinno być włączone podciąganie- czyli:
    Portc = &HFF.
    No i powinno być wyeliminowanie drgań przycisku- czyli w naprostrzej i najbardziej paskudnej formie:

    If Pinc.0 = 0 Then
    waitms 20
    If Pinc.0 = 0 Then
    ........................................
    end if
    end if
  • #7 8271775
    xury
    Specjalista automatyka domowa
    Poza cennymi uwagami kolegi powyżej ja dodam jeszcze kilka:
    Po Chr(13) powinien być jeszcze średnik, bo teraz print wysyła no końcu coś takiego: &h13 &h13 &h10
    Zamiast polecenia Gosub lepiej po kilkudziesięciu milisekundach napisać po prostu:
    Clear serialin
    Notabene podprogram powinien kończyć się poleceniem Return
    Zresztą po co ten Gosub ?
    Przecież i tak zawsze się wykonuje więc spokojnie ten kod podprogramu mógłby być w pętli głównej.
    Podprogramy stosuje się wtedy kiedy pewien fragment ma być wykonywany wielokrotnie, lub w zależności od spełnionych lub nie warunkow.
  • #8 8278121
    dark_ghost
    Poziom 10  
    Ten program jest cały czas rozbudowywany. Dla tego jest ten gosub. Tak wygląda teraz:
    
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    
    $baud = 19200
    Config Serialin = Buffered , Size = 200
    
    Dim Kod As Byte
    Dim Bufor As Byte
    Dim R As Byte
    Config Pina.0 = Output                                      'cały port d jako wyjścia                                        'cały port a jako wyjście
    Config Pina.1 = Input
    Config Pina.2 = Input
    Config Pina.3 = Input
    Config Pina.4 = Input
    Config Pinc.6 = Input
    Config Pinc.7 = Input
    
    Do
    Porta.0 = 1
    If Pinc.6 = 0 Then
    Wait 3
    If Pinc.6 = 0 Then                                          'jeżeli przycisk 1 i 2 są wciśnięte
    
    
    
    
    
    If Pina.3 = 0 Then
    Print "ATE0" ; Chr(13)
    Waitms 100
    Print "ATD782622179;" ; Chr(13)                             'zamiast 777777777 to moj tel podalem na ktory ma dzwnonic
    
    For R = 0 To 100
    
    Porta.0 = 0
    Waitms 200
    Porta.0 = 1
    Waitms 200
    Next R
    
    Print "ATH" ; Chr(13)
        End If
    
    
    
    
    
    
    If Pina.4 = 0 Then
    Print "ATE0" ; Chr(13)
    Waitms 100
    Print "ATD609406706;" ; Chr(13)                             'zamiast 777777777 to moj tel podalem na ktory ma dzwnonic
    
    For R = 0 To 50
    
    Porta.0 = 0
    Waitms 200
    Porta.0 = 1
    Waitms 200
    Next R
    
    Print "ATH" ; Chr(13)
        End If
    
    
    For R = 0 To 40
    
    Porta.0 = 0
    Wait 1
    Porta.0 = 1
    Wait 1
    Next R
    Gosub Oproznij_bufor
      Porta.0 = 0
        End If
      End If
        End If
    Loop
    End
    
    
    
    Oproznij_bufor:                                             'Opróżnia bufor z odpowiedzi telefonu
    
       Do
          Kod = Inkey()
          Bufor = Ischarwaiting()
       Loop Until Bufor = 0
    


    I dalej jest straszna loteria. Raz załącza się od razu a raz trzeba spełnić ify.
    Już sam nie wiem co robić.
REKLAMA