roboforum.ru

Технический форум по робототехнике.

 

Термометр(attiny2313+ds18b20)

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Термометр(attiny2313+ds18b20)

Сообщение space » 23 май 2010, 21:03

Проблема с программой. Компилятор её компилирует и появляется ошибка, но при этом появляется и прошивка в папке,этой прошивкой мк прошить не удаётся. Если поставить мк другой в проге, мегу 16 например, то компилируется нормально.
Ошибка такая:
Код: Выделить всёРазвернуть
Error: 344 Line: 99 Program will overwrite [ 82 too long ] , in file : C:\ds18b20

Программа:
Код: Выделить всёРазвернуть
$regfile = "attiny2313.dat"
$crystal = 8000000
Declare Sub Convallt                                        ' !!!!!! Convert T on ALL sensors
Declare Function Decigrades(byval Sc(9) As Byte) As Integer

Config Lcd = 16 * 2                                         ' дисплей 2 строки по 16 символов
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0       ' конфигурируем дисплей

Config 1wire = Portd.1                                      ' на эту ножку подключим DS18B20 и подтягивающий резистор на 4,7 ком к + питания

'Temp variables
Dim B As Byte
Dim W As Word

Dim Dg As Integer                                           'DECIgrades, I call it, cause I have no space for commas on the display....

Dim Dsid1(8) As Byte                                        'Dallas ID 64 bits incl CRC
'When used like this : DsId(1) = 1wread(8)
'DsId(1) = family code           'Ds1820 10h, DS18B20 28h, Ds18s20 10h
'DsId(2)                         '48 Bits Serial, LSB
'DsId(3)
'DsId(4)
'DsId(5)
'DsId(6)
'DsId(7)                         '48 Bits Serial, MSB
'DsId(8)                         '8 CRC

Dim Sc(9) As Byte                                           'Scratchpad 0-8 72 bits incl CRC, explanations for DS18b20
'Sc(1)                           'Temperature LSB
'Sc(2)                           'Temperature MSB
'Sc(3)                           'TH/user byte 1         also SRAM
'Sc(4)                           'TL/user byte 2         also SRAM
'Sc(5)                           'config                 also SRAM    x R1 R0 1 1 1 1 1 - the r1 r0 are config for resolution - write FF to byte for 12 bit - others dont care
'Sc(6)                           'res
'Sc(7)                           'res
'Sc(8)                           'res
'Sc(9)                           '8 CRC

'DALLAS DS18B20 ROM and scratchpad commands''''''''''''''''''''''''''1wwrite....
'&H 33  read rom - single sensor
'&H 55  match rom, followed by 64 bits
'&H CC  skip rom
'&H EC  alarm search  - ongoining alarm >TH <TL
'&H BE  read scratchpad
'&H 44  convert T

Cls
W = 1wirecount()

Dsid1(1) = 1wsearchfirst()
' First sensor identified and stored in variable
If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       ' Control that the received CRC match the calculated
   Locate 1 , 1
   Lcd "CRC OK Sensor 1 ID"
   Wait 1
   Locate 2 , 1
   For B = 1 To 8
       Lcd Hex(dsid1(b))
   Next
End If

Wait 1
Cls

' Main loop
Do
  Convallt                                                    ' "Convert ALL T on the 1w-bus"
  Waitms 750
  1wverify Dsid1(1)                                         'Issues the "Match ROM "
  Locate 1 , 1
    1wwrite &HBE
    Sc(1) = 1wread(9)                                       'read bytes into array
    If Sc(9) = Crc8(sc(1) , 8) Then
       Dg = Decigrades(sc(9))
       Locate 1 , 1
       Lcd Dg
    End If
Loop
End                                                         'end program

'Makes the Dallas "Convert T" command on the 1w-bus configured in "Config 1wire = Portb. "
'WAIT 200-750 ms after issued, internal conversion time for the sensor''''''''''
'SKIPS ROM - so it makes the conversion on ALL sensors on the bus simultaniously
'When leaving this sub, NO sensor is selected, but ALL sensors has the actual
'temperature in their scratchpad ( within 750 ms )
Sub Convallt
   1wreset                                                  ' reset the bus
   1wwrite &HCC                                             ' skip rom
   1wwrite &H44                                             ' Convert T
End Sub

'Makes a integer value of the first two bytes in scratchpad'''''''''''''
'Works on DS18 B 20 , observe "B". The R0 and R1 in Sc(5) tells you how many bits are accurate
Function Decigrades(byval Sc(9) As Byte)
   Decigrades = 0
   Decigrades = Makeint(sc(1) , Sc(2))
   Decigrades = Decigrades * 10
   Decigrades = Decigrades / 16
End Functionh
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Термометр(attiny2313+ds18b20)

Сообщение avr123.nm.ru » 23 май 2010, 21:13

Ошипка что длина строки в проге слишком большая.

А по марке МК - наверно в проге используется то чего нет в тини231 но есть в меге16
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Термометр(attiny2313+ds18b20)

Сообщение space » 23 май 2010, 22:11

ща проверю первую мысль, а на счёт того что нет врятле. по интернету искал есть проекты термометров на тиньке2313 только языки программирования другии

Добавлено спустя 47 минут 18 секунд:
нашёл другой вариант программы. работает всё. только почему то показывает всего три градуса.
если здесь так сделать, то 18
Код: Выделить всёРазвернуть
 T1 = Byte0 / 3                                         
   T2 = Byte1 * 2

Код: Выделить всёРазвернуть
Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Signtemperatura As String * 1
Dim T1 As Byte
Dim T2 As Byte
Dim I As Integer


Do



    1wreset
    1wwrite &HCC                                            ' Выдаем команду чтения ПЗУ
    1wwrite &H44                                            ' Запуск измерения

    Wait 1                                                  ' Ждем окончания преобразования

    1wreset
    1wwrite &HCC
    1wwrite &HBE                                            ' Команда чтения ОЗУ датчика


    Byte0 = 1wread()                                        ' Читаем нулевой байт

    Byte1 = 1wread()                                        ' Читаем первый байт

    1wreset

    If Byte1 >= 248 Then                                    ' Проверяем на отрицательную температуру.248 в десятичном - 11111000 в двоичном. Если температура отрицательная - вычитаем из &HFF

      Byte0 = &HFF - Byte0
      Byte1 = &HFF - Byte1
      Signtemperatura = "-"

   Else
      Signtemperatura = "+"
   End If

   T1 = Byte0 / 16                                          ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
   T2 = Byte1 * 16                                          ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)

   T1 = T1 + T2                                             ' Формирмируем результам и выдаем его на индикатор. Команда LCD сама преобразует его в десятичный вид

   Cls
   Lcd Signtemperatura ; T1 ; "C"
Wait 2


Loop
End
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Термометр(attiny2313+ds18b20)

Сообщение blindman » 24 май 2010, 04:12

avr123.nm.ru писал(а):Ошипка что длина строки в проге слишком большая.

Не длина строки, а скомпилированная программа
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Термометр(attiny2313+ds18b20)

Сообщение avr123.nm.ru » 24 май 2010, 08:55

Да, точно. Демо ограничение наверно.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14200
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Термометр(attiny2313+ds18b20)

Сообщение galex1981 » 24 май 2010, 12:56

Демо ограничение - 2 Кб. У tiny2313 столько же памяти. Это не демо ограничение а просто не влазит в МК. (Он же говорит что в мегу 16 нормально компилируется)
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4360
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Термометр(attiny2313+ds18b20)

Сообщение space » 24 май 2010, 15:59

avr123.nm.ru писал(а):Да, точно. Демо ограничение наверно.

у меня полная версия
galex1981 писал(а):Демо ограничение - 2 Кб. У tiny2313 столько же памяти. Это не демо ограничение а просто не влазит в МК. (Он же говорит что в мегу 16 нормально компилируется)

блин привык пользоваться мк у которых памяти много, вот и забыл про неё :) . Прогу нашёл другую, работает нормально :) спасибо всем за помощь
Аватара пользователя
space
 
Сообщения: 548
Зарегистрирован: 17 июн 2007, 23:44
Откуда: Тула
прог. языки: Bascom AVR Basic, CodeVisionAVR
ФИО: Замотаев Кирилл Игоревич

Re: Термометр(attiny2313+ds18b20)

Сообщение galex1981 » 24 май 2010, 16:06

Кстати, если в программе не требуется использование переменных больше чем byte то есть хорошая библиотека при подключении которой размер код значительно уменьшается:
Код: Выделить всёРазвернуть
'Use byte library for smaller code
$Lib "mcsbyte.lbx"
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4360
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Mail.ru counter