'************************************************************** '* Programa Display Case Multifuncional - DISPLAY_CASE_FINAL.BAS '* Monitor p/ tensões e temperatura no PC '* Tensões : +12V, +5V, -12V, +3,3V '* Temperaturas: T1 e T2 '* Desenvolvido por Márcio José Soares '* p/ revista PC & CIA - 24/06/2003 ''************************************************************* '* últimas alterações '* em 16/08/2003 acertado valores para display '* em 01/09/2003 últimos testes com relé '************************************************************* $crystal = 10000000 'Determina a frequência do cristal $noramclear 'configura portas 'Config Portd = Input 'port D é entrada 'Pinb1 entrada, o resto saída Config Portb = &B11111101 Declare Sub Le_ad04() 'variáveis Dim C0 As Byte , J As Byte 'variavel p/ pegar 1 byte do AD Dim Nrad As Byte Dim Dadow As Word Dim Sdado As String * 4 'variável p/ mostrar Dim Temp As String * 5 Dim Pdado As String * 14 Dim Pulsos As Long 'Abre porta de comunicação p/ display e 'ADC04 'ADC04/1 - leitura de tensões 'ADC04/2 - leitura de temperaturas Open "comb.0:2400,8,n,1" For Output As #1 'porta ADC04 Open "comb.1:2400,8,n,1" For Input As #2 'porta ADC04 'o usuário tem exatos 8 segundos entre o ligar do DCM e o micro 'caso isso não ocorra o relé será desligado e o micro não podera 'mais ser ligado 'O tempo pode ser alterado para maior conforto 'lembre-se apenas que quanto maior o tempo 'maior o espaço de programa utilizado Set Portb.5 'liga rele para habilitar fonte Wait 8 'espera 8 segundos Do Printbin &H5C ; &H40 ; 32 ; &H30 'envia comando Print " Revista PC&CIA" Print "------------------------"; Print "Fonte (V) |Temperatura"; Pulsein Pulsos , Pinb , 7 , 0 If Pulsos = 0 Then 'se cooler parado Reset Portb.5 'desliga rele da fonte Printbin &H5C ; &H40 ; 32 ; &H30 'envia comando Print " Cooler Parado " Sound Portb.6 , 5000 , 200 'avisa Goto Tmp_varredura 'desvia Else Set Portb.5 'liga rele da fonte End If Pulsos = 1500000 / Pulsos For J = 0 To 3 'conta até 4 Nrad = 1 Call Le_ad04() 'le AD de tensões Print Pdado; 'imprime dado sem pular linha Nrad = 2 Call Le_ad04() 'le AD temperatura Select Case J Case 0 : Print "T1=" ; Sdado ; "C" 'sim, imprime temperatura e pula linha Case 1 : Print "T2=" ; Sdado ; "C" Case 2 : Print "CPU Cooler" Case 3 : Print Pulsos ; " RPM"; End Select Next 'Tempo entre varreduras. Pode ser entre 500ms a 2 segundos Tmp_varredura: Wait 2 'aguarda 2s e repete leitura Loop Sub Le_ad04() 'faz leituras If Nrad = 1 Then 'verifica qual AD solicitado Set Portb.2 'para ligar AD correto Reset Portb.3 Else Reset Portb.2 Set Portb.3 End If Printbin #1 , J 'usa AD1 em 10bits C0 = Waitkey(#2) 'colhe byte If Nrad = 1 Then 'verifica qual AD If J < 2 Then 'verifica canal Dadow = C0 * 198 Temp = " " + Str(dadow) Else Dadow = C0 * 49 Temp = Str(dadow) End If Sdado = Left(temp , 2) + "." + Mid(temp , 3 , 3) Else Dadow = C0 * 2 Dadow = Dadow + 4 Sdado = Str(dadow) End If If Nrad = 1 Then Select Case J Case 0 : Pdado = "+5.0:+" + Sdado 'acrecenta string no dado Case 1 : Pdado = "+3.3:+" + Sdado Case 2 : Pdado = "+12 :+" + Sdado Case Else Pdado = "-12 :-" + Sdado End Select If C0 < 150 Then 'se tensão menor que 50% avisa Sound Portb.6 , 5000 , 200 End If End If Pdado = Pdado + "|" 'insere finalizador End Sub 'retorna