Jump to content

Александр Бушков

Пользователи
  • Content Count

    22
  • Joined

  • Last visited

  • Days Won

    4

Reputation Activity

  1. Like
    Александр Бушков got a reaction from Ростислав Михайлов in Датчик воды на триггере Шмидта   
    В качестве зонда используется любой провод, например ВВГ 2х1,5 мм2

  2. Like
    Александр Бушков got a reaction from VitalForce in 16F877A-I/P Термометр на DS18b20   
    ' Программа работает!
    ' Термометр на DS18b20, 12 битное преобразование
    ' Точность и шаг хода температуры 0.0625 градуса
    ' Вывод на дисплей целого чила полных градусов и целого числа десятитысячных долей градуса 
    ' Вывод на дисплей признака изделия, 6 байт собственного номера, байта Ц.К.
    ' Программа. версия от 31 мая 2016
     
    '16F877А-I/P  
     
     gl var byte         'градусы  младший байт температуры из DS18b20
     gh var byte         'градусы  старший байт температуры из DS18b20
     zn var byte         'Знак температуры
     x var byte
     fam var byte
     ser0 var byte
     ser1 var byte
     ser2 var byte
     ser3 var byte
     ser4 var byte
     ser5 var byte
     crc var byte 
     
     temp var byte       'Целочисло полных градусов
     temp0001 var word   'Целое число десятитысячных долей градуса при выводе на дисплей.
     
     
     
    DEFINE LCD_DREG   PORTB
    DEFINE LCD_DBIT   4
    DEFINE LCD_RSREG  PORTB
    DEFINE LCD_RSBIT  3
    DEFINE LCD_EREG   PORTB
    DEFINE LCD_EBIT   0
    DEFINE LCD_BITS   4
    DEFINE LCD_LINES  2
    DEFINE LCD_COMMANDUS 2000
    DEFINE LCD_DATUS  50
    define ADC_BITS   10
    define ADC_CLOCK 3
    define ADC_SAMPLEUS 100
     
    pause 100
     
    'Конфигурируем порты
    PortB=%00000000
    PortC=%00000000
    PortD=%00000000
    PortE=%00000000
     
    TrisB=%00000000 ' 0- Выход, 1 - Вход    !!!!
    TrisD=%11111111 ' 0- Выход, 1 - Вход    !!!!
    TrisA=%11111111 ' 0- Выход, 1 - Вход    !!!!
    TrisE=%11111101 ' 0- Выход, 1 - Вход    !!!!
    TrisC=%00000000 ' 0- Выход, 1 - Вход    !!!! 
    ADCON1=%10000010 
     
     
    x=0
     
    PortE.1=1      ' Берем питание  VDD для  DS18b20
     
    gl=0
    gh=0
      
    sto: 'НАЧАЛО ЦИКЛА 
     
    x=120   ' Промежуточные вычмсления
    x=x-80
    x=x/10
    x=x*30 
     
    TrisC.3=0 ' Порт ввода-вывода информации в  DS18b20
    OWout PortC.3,1,[$CC]   ' Инициализация  DS18b20 (1)  и команда пропуска серийного номера (СС)
    OWout PortC.3,0,[$44]   ' Команда запуска преобразования температуры в DS18b20
    pause 900
     
     
    OWout PortC.3,1,[$CC]   '  Инициализация  DS18b20 (1)  и команда пропуска серийного номера (СС)
    OWout PortC.3,0,[$BE]   '  Запускаем команду чтения двух байт температуры из DS18b20
    TrisC.3=1 
    owin PortC.3,0,[gl,gh]  '  Прием двух байт температуры из DS18b20
     
    TrisC.3=0               '  Порт ввода-вывода информации в  DS18b20
     
    OWout PortC.3,1,[$33]   '  Запускаем команду чтения восьми байт признак изделия, серийный номер 6 байт, байт ц.к. из DS18b20
    pause 900
    TrisC.3=1 
    owin PortC.3,0,[fam,ser0,ser1,ser2,ser3,ser4,ser5, crc] 'Прием 8 байт из DS18b20  признак изделия, серийный номер 6 байт, байт ц.к.
     
     
    temp=0
    temp0001=0
    '  Преобразование байтов температуры из DS18b20  в числовое значение для вывода на дисплей
    if gh.7=0 then
     zn="+"
     else
     zn="-"
    endif
     '  Преобразование для положительной температуры
    if gh.7=0 then
        if gh.2 =1 then temp=temp+64 
        if gh.1 =1 then temp=temp+32 
        if gh.0 =1 then temp=temp+16
     
        if gl.7 = 1 then temp=temp+8
        if gl.6= 1 then temp=temp+4 
        if gl.5 =1 then temp=temp+2
        if gl.4 =1 then temp=temp+1 
        if gl.3 =1 then temp0001=temp0001+5000 
        if gl.2 =1 then temp0001=temp0001+2500 
        if gl.1 =1 then temp0001=temp0001+1250       
        if gl.0=1 then temp0001=temp0001+625            
        
        
    endif
     '  Преобразование для отрицательной температуры
    if gh.7=1 then
         gl=~gl+1  ' Делаем дополнение к отрицательной температуре:
                   ' инвертиреем биты и прибавляем 1 
         gh=~gh
         
        if gl=0 then gh=gh+1 'Учитываем перенос из мл.байта при +1,если он был                      
     
        if gh.2 =1 then temp=temp+64 
        if gh.1 =1 then temp=temp+32 
        if gh.0 =1 then temp=temp+16
     
        if gl.7 = 1 then temp=temp+8
        if gl.6= 1 then temp=temp+4 
        if gl.5 =1 then temp=temp+2
        if gl.4 =1 then temp=temp+1 
        if gl.3 =1 then temp0001=temp0001+5000 
        if gl.2 =1 then temp0001=temp0001+2500 
        if gl.1 =1 then temp0001=temp0001+1250       
        if gl.0=1 then temp0001=temp0001+625            
        
        
    endif 
    'Вывод на дисплей целого чила полных градусов и целого числа десятитысячных долей градуса  
    'Вывод на дисплей 8 байт из DS18b20  признак изделия, серийный номер 6 байт, байт ц.к.         
        lcdout $fe, 1
        lcdout $fe, 2 
        
        lcdout "DS18b20 Temperat" 
        lcdout $fe, 192
        if temp0001=625 then
        lcdout zn,dec temp,".0625" 'Добавляем ведущий 0 перед 625 когда temp0001=625. Иначе было бы 23.625 вместо 23.0625
        else
        lcdout zn,dec temp,".",dec temp0001
        endif   
        pause 3000    
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Fam = ",dec fam
        lcdout $fe, 192
        lcdout "Ser0= ",dec ser0                
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser1= ",dec ser1
        lcdout $fe, 192
        lcdout "Ser2= ",dec ser3                
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser3= ",dec ser3
        lcdout $fe, 192
        lcdout "Ser4= ",dec ser4            
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser5= ",dec ser5
        lcdout $fe, 192
        lcdout "CRC = ",dec crc              
        pause 3000 
        
        
        
    'Конец вывода информации на дисплей 
     
    goto sto ' КОНЕЦ ЦИКЛА 
     
    End

  3. Like
    Александр Бушков got a reaction from Evgeniy in 16F877A-I/P Термометр на DS18b20   
    ' Программа работает!
    ' Термометр на DS18b20, 12 битное преобразование
    ' Точность и шаг хода температуры 0.0625 градуса
    ' Вывод на дисплей целого чила полных градусов и целого числа десятитысячных долей градуса 
    ' Вывод на дисплей признака изделия, 6 байт собственного номера, байта Ц.К.
    ' Программа. версия от 31 мая 2016
     
    '16F877А-I/P  
     
     gl var byte         'градусы  младший байт температуры из DS18b20
     gh var byte         'градусы  старший байт температуры из DS18b20
     zn var byte         'Знак температуры
     x var byte
     fam var byte
     ser0 var byte
     ser1 var byte
     ser2 var byte
     ser3 var byte
     ser4 var byte
     ser5 var byte
     crc var byte 
     
     temp var byte       'Целочисло полных градусов
     temp0001 var word   'Целое число десятитысячных долей градуса при выводе на дисплей.
     
     
     
    DEFINE LCD_DREG   PORTB
    DEFINE LCD_DBIT   4
    DEFINE LCD_RSREG  PORTB
    DEFINE LCD_RSBIT  3
    DEFINE LCD_EREG   PORTB
    DEFINE LCD_EBIT   0
    DEFINE LCD_BITS   4
    DEFINE LCD_LINES  2
    DEFINE LCD_COMMANDUS 2000
    DEFINE LCD_DATUS  50
    define ADC_BITS   10
    define ADC_CLOCK 3
    define ADC_SAMPLEUS 100
     
    pause 100
     
    'Конфигурируем порты
    PortB=%00000000
    PortC=%00000000
    PortD=%00000000
    PortE=%00000000
     
    TrisB=%00000000 ' 0- Выход, 1 - Вход    !!!!
    TrisD=%11111111 ' 0- Выход, 1 - Вход    !!!!
    TrisA=%11111111 ' 0- Выход, 1 - Вход    !!!!
    TrisE=%11111101 ' 0- Выход, 1 - Вход    !!!!
    TrisC=%00000000 ' 0- Выход, 1 - Вход    !!!! 
    ADCON1=%10000010 
     
     
    x=0
     
    PortE.1=1      ' Берем питание  VDD для  DS18b20
     
    gl=0
    gh=0
      
    sto: 'НАЧАЛО ЦИКЛА 
     
    x=120   ' Промежуточные вычмсления
    x=x-80
    x=x/10
    x=x*30 
     
    TrisC.3=0 ' Порт ввода-вывода информации в  DS18b20
    OWout PortC.3,1,[$CC]   ' Инициализация  DS18b20 (1)  и команда пропуска серийного номера (СС)
    OWout PortC.3,0,[$44]   ' Команда запуска преобразования температуры в DS18b20
    pause 900
     
     
    OWout PortC.3,1,[$CC]   '  Инициализация  DS18b20 (1)  и команда пропуска серийного номера (СС)
    OWout PortC.3,0,[$BE]   '  Запускаем команду чтения двух байт температуры из DS18b20
    TrisC.3=1 
    owin PortC.3,0,[gl,gh]  '  Прием двух байт температуры из DS18b20
     
    TrisC.3=0               '  Порт ввода-вывода информации в  DS18b20
     
    OWout PortC.3,1,[$33]   '  Запускаем команду чтения восьми байт признак изделия, серийный номер 6 байт, байт ц.к. из DS18b20
    pause 900
    TrisC.3=1 
    owin PortC.3,0,[fam,ser0,ser1,ser2,ser3,ser4,ser5, crc] 'Прием 8 байт из DS18b20  признак изделия, серийный номер 6 байт, байт ц.к.
     
     
    temp=0
    temp0001=0
    '  Преобразование байтов температуры из DS18b20  в числовое значение для вывода на дисплей
    if gh.7=0 then
     zn="+"
     else
     zn="-"
    endif
     '  Преобразование для положительной температуры
    if gh.7=0 then
        if gh.2 =1 then temp=temp+64 
        if gh.1 =1 then temp=temp+32 
        if gh.0 =1 then temp=temp+16
     
        if gl.7 = 1 then temp=temp+8
        if gl.6= 1 then temp=temp+4 
        if gl.5 =1 then temp=temp+2
        if gl.4 =1 then temp=temp+1 
        if gl.3 =1 then temp0001=temp0001+5000 
        if gl.2 =1 then temp0001=temp0001+2500 
        if gl.1 =1 then temp0001=temp0001+1250       
        if gl.0=1 then temp0001=temp0001+625            
        
        
    endif
     '  Преобразование для отрицательной температуры
    if gh.7=1 then
         gl=~gl+1  ' Делаем дополнение к отрицательной температуре:
                   ' инвертиреем биты и прибавляем 1 
         gh=~gh
         
        if gl=0 then gh=gh+1 'Учитываем перенос из мл.байта при +1,если он был                      
     
        if gh.2 =1 then temp=temp+64 
        if gh.1 =1 then temp=temp+32 
        if gh.0 =1 then temp=temp+16
     
        if gl.7 = 1 then temp=temp+8
        if gl.6= 1 then temp=temp+4 
        if gl.5 =1 then temp=temp+2
        if gl.4 =1 then temp=temp+1 
        if gl.3 =1 then temp0001=temp0001+5000 
        if gl.2 =1 then temp0001=temp0001+2500 
        if gl.1 =1 then temp0001=temp0001+1250       
        if gl.0=1 then temp0001=temp0001+625            
        
        
    endif 
    'Вывод на дисплей целого чила полных градусов и целого числа десятитысячных долей градуса  
    'Вывод на дисплей 8 байт из DS18b20  признак изделия, серийный номер 6 байт, байт ц.к.         
        lcdout $fe, 1
        lcdout $fe, 2 
        
        lcdout "DS18b20 Temperat" 
        lcdout $fe, 192
        if temp0001=625 then
        lcdout zn,dec temp,".0625" 'Добавляем ведущий 0 перед 625 когда temp0001=625. Иначе было бы 23.625 вместо 23.0625
        else
        lcdout zn,dec temp,".",dec temp0001
        endif   
        pause 3000    
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Fam = ",dec fam
        lcdout $fe, 192
        lcdout "Ser0= ",dec ser0                
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser1= ",dec ser1
        lcdout $fe, 192
        lcdout "Ser2= ",dec ser3                
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser3= ",dec ser3
        lcdout $fe, 192
        lcdout "Ser4= ",dec ser4            
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser5= ",dec ser5
        lcdout $fe, 192
        lcdout "CRC = ",dec crc              
        pause 3000 
        
        
        
    'Конец вывода информации на дисплей 
     
    goto sto ' КОНЕЦ ЦИКЛА 
     
    End

  4. Like
    Александр Бушков got a reaction from VitalForce in 16F877a-I/P термометр на DS1820S с чтением собственного номера   
    ' Программа работает!
    ' Термометр на DS1820S, 9 битное преобразование
    ' Точность 0.5 градуса
    ' Вывод на дисплей признака изделия, 6 байт собственного номера, байта Ц.К.
    ' Программа. версия от 26 мая 2016
     
    '16F877А-I/P  
     
     gl var byte         'градусы  младший байт температуры из DS1820S
     gh var byte        'градусы  старший байт температуры из DS1820S
     zn var byte         'Знак температуры
     x var byte
     fam var byte
     ser0 var byte
     ser1 var byte
     ser2 var byte
     ser3 var byte
     ser4 var byte
     ser5 var byte
     crc var byte 
     
     temp var byte       'Численное значение температуры на дисплей
     dg var byte         ' десятые доли градуса при выводе на дисплей: 0 или 5
     
     
     
    DEFINE LCD_DREG   PORTB
    DEFINE LCD_DBIT   4
    DEFINE LCD_RSREG  PORTB
    DEFINE LCD_RSBIT  3
    DEFINE LCD_EREG   PORTB
    DEFINE LCD_EBIT   0
    DEFINE LCD_BITS   4
    DEFINE LCD_LINES  2
    DEFINE LCD_COMMANDUS 2000
    DEFINE LCD_DATUS  50
    define ADC_BITS   10
    define ADC_CLOCK 3
    define ADC_SAMPLEUS 100
     
    pause 100
     
    'Конфигурируем порты
    PortB=%00000000
    PortC=%00000000
    PortD=%00000000
    PortE=%00000000
     
    TrisB=%00000000 ' 0- Выход, 1 - Вход    !!!!
    TrisD=%11111111 ' 0- Выход, 1 - Вход    !!!!
    TrisA=%11111111 ' 0- Выход, 1 - Вход    !!!!
    TrisE=%11111101 ' 0- Выход, 1 - Вход    !!!!
    TrisC=%00000000 ' 0- Выход, 1 - Вход    !!!! 
    ADCON1=%10000010 
     
     
    x=0
     
    PortE.1=1      ' Берем питание  VDD для  DS1820S
     
    gl=0
    gh=0
      
    sto: 'НАЧАЛО ЦИКЛА 
     
    x=120   ' Промежуточные вычисления
    x=x-80
    x=x/10
    x=x*30 
     
    TrisC.3=0 ' Порт ввода-вывода информации в  DS1820S
    OWout PortC.3,1,[$CC]   '  Инициализация  DS1820S (1)  и команда пропуска серийного номера (СС)
    OWout PortC.3,0,[$44]   ' Команда запуска преобразования температуры в DS1820S
    pause 900
     
     
    OWout PortC.3,1,[$CC]   '  Инициализация  DS1820S (1)  и команда пропуска серийного номера (СС)
    OWout PortC.3,0,[$BE]   ' Запускаем команду чтения двух байт температуры из DS1820S
    TrisC.3=1 
    owin PortC.3,0,[gl,gh] 'Прием двух байт температуры из DS1820S
     
    TrisC.3=0 ' Порт ввода-вывода информации в  DS1820S
     
    OWout PortC.3,1,[$33]   ' Запускаем команду чтения восьми байт признак изделия, серийный номер 6 байт, байт ц.к. из DS1820S
    pause 900
    TrisC.3=1 
    owin PortC.3,0,[fam,ser0,ser1,ser2,ser3,ser4,ser5, crc] 'Прием 8 байт из DS1820S  признак изделия, серийный номер 6 байт, байт ц.к.
     
     
    temp=0
    '  Преобразование байтов температуры из DS1820S  в числовое значение для вывода на дисплей
    if gh.0=0 then
     zn="+"
     else
     zn="-"
    endif
     '  Преобразование для положительной температуры
    if gh.0=0 then
        if gl.7 = 1 then temp=temp+64
        if gl.6= 1 then temp=temp+32 
        if gl.5 =1 then temp=temp+16 
        if gl.4 =1 then temp=temp+8 
        if gl.3 =1 then temp=temp+4 
        if gl.2 =1 then temp=temp+2 
        if gl.1 =1 then temp=temp+1       
        
        if gl.0=1 then
         dg="5" 
        else
        dg="0"
        endif
    endif
     '  Преобразование для отрицательной температуры
    if gh.0=1 then
        gl=~gl+1
        if gl.7 = 1 then temp=temp+64
        if gl.6= 1 then temp=temp+32 
        if gl.5 =1 then temp=temp+16 
        if gl.4 =1 then temp=temp+8 
        if gl.3 =1 then temp=temp+4 
        if gl.2 =1 then temp=temp+2 
        if gl.1 =1 then temp=temp+1       
        
        if gl.0=1 then
         dg="5" 
        else
        dg="0"
        endif
    endif   
    'Вывод на дисплей 8 байт из DS1820S  признак изделия, серийный номер 6 байт, байт ц.к.         
        lcdout $fe, 1
        lcdout $fe, 2 
        
        lcdout "DS1820S Temperat" 
        lcdout $fe, 192
        lcdout zn,dec temp,".",dg   
        pause 3000    
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Fam = ",dec fam
        lcdout $fe, 192
        lcdout "Ser0= ",dec ser0                
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser1= ",dec ser1
        lcdout $fe, 192
        lcdout "Ser2= ",dec ser2                
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser3= ",dec ser3
        lcdout $fe, 192
        lcdout "Ser4= ",dec ser4            
        pause 3000
        
        lcdout $fe, 1
        lcdout $fe, 2    
        lcdout "Ser5= ",dec ser5
        lcdout $fe, 192
        lcdout "CRC = ",dec crc              
        pause 3000 
        
        
        
    'Конец вывода информации на дисплей 
     
    goto sto ' КОНЕЦ ЦИКЛА 
     
    End
×
  • Create New...