Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega8][bascom]Prośba o Sprawdzenie kodu stacji lutownicz

murjak 02 Nov 2010 09:39 1814 2
  • #1
    murjak
    Level 12  
    Witam robie stacje lutowniczą z atmegą8 napisałem taki kod w bascomie, czy bardziej doświadczeni koledzy mogli by na nieo zerknąć i wytknąć mi poważne błędy jakie popełniłem.

    Temperatura z termopary jest brana za pomoca mac6675 i spi, uśpienie powinno się włączyć po minucie leżenia kolby nieruszanej i zmniejszyć ustawiona temp do 160 stopni, po podniesieniu kolby temp powinna sie ustawiać na stara zadana.

    Porty.
    PortC = LCD
    PortB = Max6675 odczyt temperatury z termopary.


    Pd0 Czekanie na zero fazy.
    Pd1 sterowanie grzałka
    Pd3, pd3 encoder do zmiany ostawień
    Pd4 czujnik odłożenia lutownicy do trzymaka.
    Pd5 czujnik 1wire d18b20. - jeszcze nie dodany w programie.
    Pd7 Podswietlanie LCD




    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000

    $baud = 19200                                           
    $hwstack = 32                                               
    $swstack = 10                                               
    $framesize = 40                                             


    Dim A(2) As Byte
    Dim Message As String * 16

    Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32           

    Config Timer0 = Timer , Prescale = 1
    Config 1wire = Portd.5
    Config Portd.1 = Output
    Config Portd.7 = Output
    Config Pind.0 = Input
    Config Pind.4 = Input
    Set Portd.4                                                 'Pullup uspienia
    Set Portd.2                                                 'Pullup encodera
    Set Portd.3                                                 'Pullup encodera

    Grzalka Alias Portd.1
    Pods_lcd Alias Portd.7
    Zero_fazy Alias Pind.0
    Uspienie Alias Pind.4

    Dim B As Integer
    Dim C As Integer
    Dim Nastawa As Word
    Dim Eeprom As Word
    Dim Temp As Word
    Dim Tempp As Word
    Dim Tempm As Word
    Dim Pamiec As Bit
    Dim Temp_lcd As String * 1
    Dim Dummy As Byte                                           
    Dim Male As Word
    Dim Duze As Word
    Dim Przerw0 As Word

    Declare Sub Get_temp                                       
    Declare Sub Mniej_pr
    Declare Sub Wiecej_pr
    Declare Sub Licz
    Declare Sub Timer_start
    Declare Sub Timer_stop
    Dummy = 0

    Readeeprom Nastawa , 2

    On Timer0 Licz


     Enable Interrupts

     Enable Timer0

     Stop Timer0

     Timer0 = 0



    Pods_lcd = 1
    Cls
    Cursor Off
    Lcd " Witaj Panie"
    Lowerline
    Lcd " Czas Lutowania"
    Wait 1
    Cls







    Do

    Get_temp
    Tempp = Temp + 3
    Tempm = Temp - 3



    Debounce Uspienie , 0 , Timer_start , Sub
    Debounce Uspienie , 1 , Timer_stop , Sub



    Home
    Lcd "Nastawa: "
    Lcd Nastawa
    Lcd Chr(1)
    Lcd "C"
    Lcd "  Temp: "
    Lcd Temp
    Lcd Chr(1)
    Lcd "C"



    B = Encoder(pinb.0 , Pinb.1 , Mniej_pr , Wiecej_pr , 1)


    If Duze = 60 And Uspienie = 0 Then
    Nastawa = 160
    Waitms 300
    Pods_lcd = 0
    Waitms 300
    Pods_lcd = 1
    End If


    If Tempm < Nastawa And Grzalka = 0 Then                     '+- 3 stopnie temp;]
    Bitwait Zero_fazy , Set
    Grzalka = 1
    Elseif Tempp > Nastawa Then
    Grzalka = 0
    End If






    If Nastawa >= Temp And Uspienie = 1 And Duze = 0 Then
    Readeeprom Eeprom , 2
    If Nastawa <> Eeprom Then
    Writeeeprom Nastawa , 2
    End If
    End If



      Waitms 10


    Loop

    End




    Sub Get_temp
       Spiinit
       Waitms 100                                               ' Temperaturka
       Spiin A(1) , Dummy                                       ' Czytanie
       Temp = A(1) * 256
       Temp = Temp + A(2)                                     
       Temp = Temp / 32                                 
                                                               
       Temp = Temp - 3                                         
    End Sub

    Sub Wiecej_pr
    Nastawa = Nastawa + 5
    End Sub

    Sub Mniej_pr
    Nastawa = Nastawa - 5
    End Sub

    Sub Licz
    Incr Przerw0

      If Przerw0 = 3125 Then

      Incr Male

      Przerw0 = 0

          If Male = 10 Then
             Incr Duze
             Male = 0
          End If
      End If
    End Sub

    Sub Timer_start
    Stop Timer0
       Male = 0
       Duze = 0

       Timer0 = 0

       Start Timer0
    End Sub

    Sub Timer_stop
    Stop Timer0
       Male = 0
       Duze = 0

       Timer0 = 0
    Readeeprom Nastawa , 2
    End Sub


    Z góry dziekuje za wszelka pomoc.
  • #3
    murjak
    Level 12  
    Tzn, chodzi mi o to zeby ekran tj podświetlanie ekranu migało kiedy stacja będzie w stanie uśpienie.
    Jeżeli znasz bardziej elegancki sposób na rozwiązanie tego był bym wdzięczny za wszystkie wskazówki, to jest w sumie mój pierwszy program pisany na avr'y i w bascomie więc pisząc go nie miałem żadnego doświadczenia.
    Wzorowałem się na tym co znalazłem w internecie używając googla i własnych przemyśleniach.


    Wgrałem w/w program do procka i pojawia sie witaj panie na lcd po czym znika a potem jest tylko bialy lcd co moze sie zawieszac?


    inventco.eu - proszę używać przycisku zmień. A nie pisać wiadomości pod wiadomością.