terça-feira, 13 de dezembro de 2016

Relogio calendario feito no Bascom

Saldações pessoal que acompanha o meu humilde blog estão tranquilos? Depois de tanto tempo sem atualizar nada vim postar uma novidade que estava desenvolvendo. Um relogio calendário com um alarme de hora facilmente programável. Nesse relogio eu utilizei a linguagem BASCOM, pois a linguagem arduino é uma bela duma porcaria para temporização, a funçao millis() não funciona tão bem quanto a função timer...

Mas bem antes de tudo o BASCOM usa a linguagem basic, o que facilita um pouco pra quem ja é familiarizado com a mesma....

Esse código eu ocupei praticamente o espaço inteiro de 4kb para versão gratuita,rs, mas ficou show!Se tivesse uma versão paga dava para incluir os dias da semana.

Utilizei um display lcd para mostrar as informações e mais 5 botoes de acionamento que ajustam os minutos, as horas , os dias da semana, meses e anos.

Sem mais delongas aqui vai o código em BASCOM



--------------------------------
$regfile = "m328Pdef.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32



Config Portd = Output
Config Portb.0 = Input
Config Portb.1 = Input
Config Portb.2 = Input
Config Portb.3 = Input
Config Portc.0 = Input
Config Portc.1 = Input
 Config Portc.2 = Input

Config Portb.4 = Input

Config Portb.5 = Output

Dim Hora As Integer
Dim Minuto As Integer
Dim Segundo As Integer
Dim Ajuste As Integer


Dim Vai As Integer
Dim Dia As Integer
Dim Mes As Integer
Dim Ano As Integer
Dim Limite As Integer
Dim Alarmehora As Integer
Dim Alarmeminuto As Integer

 Alarmehora = 10

Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1

Sinal Alias Portb.5
Sinal = 0



Botaohora Alias Pinb.0
Botaominuto Alias Pinb.1
Botaovetor Alias Pinb.2
Botaoalarme Alias Pinb.3
Botaocronometro1 Alias Pinb.4

Ano = 16
Dia = 1
Config Lcdpin = Pin , E = Portd.2 , Rs = Portd.3 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcd = 16 * 2
Config Timer1 = Timer , Prescale = 256 ,

Timer1 = 3036
Enable Interrupts
Enable Timer1
On Timer1 Pulso



 Do
 Start Timer1


      If Segundo >= 60 Then
 Segundo = 0
 Minuto = Minuto + 1
 End If
 If Minuto >= 60 Then
 Minuto = 0
 Hora = Hora + 1
 End If
 If Hora >= 24 Then
 Dia = Dia + 1

 Hora = 0
 End If
 If Segundo < 0 Then
 Segundo = 0
 End If
 If Minuto < 0 Then
 Minuto = 0
 End If
 If Hora < 0 Then
 Hora = 0
 End If


 Locate 1 , 1
 Lcd "hora:"
   Lcd Hora ; ":" ; Minuto ; ":" ; Segundo
   Locate 2 , 1
   Lcd "d:"
    Lcd Dia ; "/" ; Mes ; "/20" ; Ano
    If Botaohora = 0 And Ajuste = 1 Then
    Waitms 300
    Hora = Hora + 1
    End If
    If Botaominuto = 0 And Ajuste = 1 Then
    Waitms 300
    Hora = Hora - 1
    End If
    If Botaohora = 0 And Ajuste = 2 Then
    Waitms 300
    Minuto = Minuto + 1
    End If
    If Botaominuto = 0 And Ajuste = 2 Then
    Waitms 300
    Minuto = Minuto - 1
    End If
    If Botaohora = 0 And Ajuste = 3 Then
    Waitms 300
    Mes = Mes + 1
    End If
    If Botaominuto = 0 And Ajuste = 3 Then
    Waitms 300
    Mes = Mes - 1
    End If
    If Botaohora = 0 And Ajuste = 4 Then
    Waitms 300
    Dia = Dia + 1
    End If
    If Botaominuto = 0 And Ajuste = 4 Then
    Waitms 300
    Dia = Dia - 1
    End If
    If Dia > Limite Then
    Dia = 1
    Mes = Mes + 1

    End If
    If Dia < 1 Then
    Dia = Limite
    End If
      If Botaohora = 0 And Ajuste = 5 Then
      Waitms 300
      Ano = Ano + 1
      End If
      If Botaominuto = 0 And Ajuste = 5 Then
      Waitms 300
      Ano = Ano - 1
      End If

      If Botaohora = 1 And Ajuste = 6 Then

Locate 1 , 14
      Lcd "ALH"

      Locate 2 , 14
      Lcd Alarmehora
      End If
      If Botaohora = 1 And Ajuste = 7 Then
      Locate 1 , 14
      Lcd "ALM"
      Locate 2 , 14
      Lcd Alarmeminuto

      End If

      If Botaohora = 0 And Ajuste = 6 Then
      Waitms 300
      Alarmehora = Alarmehora + 1
      End If

      If Botaominuto = 0 And Ajuste = 6 Then
      Waitms 300
      Alarmehora = Alarmehora - 1

      End If
      If Botaohora = 0 And Ajuste = 7 Then
      Waitms 300
      Alarmeminuto = Alarmeminuto + 1
      End If

       If Botaominuto = 0 And Ajuste = 7 Then
       Waitms 300

       Alarmeminuto = Alarmeminuto - 1
       End If

        If Alarmehora = Hora And Alarmeminuto = Minuto Then

        Sinal = 1
        Waitms 300
        Sinal = 0

        End If
           If Botaoalarme = 0 Then
           Waitms 300
           Alarmeminuto = Alarmeminuto - 2
           End If


      If Alarmehora > 24 Then
      Alarmehora = 0
      End If
      If Alarmehora < 0 Then
      Alarmehora = 24
      End If
      If Alarmeminuto >= 60 Then
      Alarmeminuto = 0
      End If
      If Alarmeminuto < 0 Then
      Alarmeminuto = 59
      End If

      If Ano < 16 Then
      Ano = 16
      End If
      If Ano > 36 Then
      Ano = 16
      End If


    If Mes > 12 Then
    Mes = 0
    End If
    If Mes < 0 Then
    Mes = 12
    End If

    If Mes = 1 Then
    Limite = 31
    End If
    If Mes = 3 Then
    Limite = 31
    End If
    If Mes = 5 Then
    Limite = 31
    End If
    If Mes = 7 Then
    Limite = 31
    End If
    If Mes = 8 Then
    Limite = 31
    End If
    If Mes = 10 Then
    Limite = 31
    End If
    If Mes = 12then
    Limite = 31
    End If

    If Mes = 2 Then
    Limite = 28
      End If
    If Mes = 4 Then
    Limite = 30
    End If
    If Mes = 6 Then
    Limite = 30
    End If
    If Mes = 11 Then
    Limite = 30
    End If
    If Mes = 9 Then
    Limite = 30
    End If



    If Botaovetor = 0 Then
    Waitms 300
    Ajuste = Ajuste + 1
    End If
    If Ajuste >= 8 Then
    Waitms 300
    Cls


    Ajuste = 1
    End If


 Loop
 Pulso:
 Segundo = Segundo + 1
 Return
 '--------------------

Umas considerações: Os botões são conectados do pino 8 ao 12; O botão do pino 10 vai alternando os ajustes de minuto, hora,dia,meses anos. O pino 8 ajusta para mais e o pino 9 ajusta para menos. O botão do pino 12 ele desliga o alarme previamente configurado para 10 horas, mas pode ser ajustado para o horário que desejar. Devido a um erro no cristal o arduino, nao contabilizo os segundos. Mas os minutos e as horas são contabilizados com uma precisão de erro de 1 minuto a cada 2 semanas. Feito absurdamente incrível para quem não está usando módulo ou biblioteca específico...
E é isso ahe pessoal, nessa imagem vocês podem ver o esquema elétrico. Ta meio bagunçado mas e sacoisa mermo, da pra entender:

E em breve um vídeo dele funcionando, aguardem...

2 comentários:

Unknown disse...

Muito bom seu relogio,e ja fiz um desse para controlar duas maquinas ,lavadoras industriais,rotacao ,reversao ,e centrifugacao,O Bascom tem um controle de alta precisao,aceita a waitms,e waitus ,para fracao menor de segundo..

Eletronicaeutilidades disse...

Poxa bacana cara. Vi que você e da Abel tecnologia. Sempre quis trabalhar numa empresa seria neste ramo.
Ps:Sou o dono do blog.