|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 01 08, 19:39. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » Atmega16 ir DS18B20
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 13, 19:43 |
|
|
|
Niekaip nepavyksta parašyti programos, su kuria galėčiau gauti temperatūrą iš DS18B20. Papraščiausiai nekompiliuoja, nes parašau negerai. Naudoju WinAVR. Į projekto direktoriją įkėliau dallas.h dallasconf.h (pakonfiguravau pagal savo poreikius). Kokius etapus būtina atlikti norint gauti temperatūrą? Visų pirma, manau, reikia aktyvuoti 1-Wire veikimą. Tai padaroma taip?
Kodas: |
void ds18b20Init(void) |
Kaip suprantu, kiekvienas DS18B20 turi savo adresą, pagal kur galima konkrečiai iš kiekvieno gauti temperatūra. Kaip sužinoti priskirtą adresą?
Galima jungti 5 daviklius ant vienos magistralės ir iš kiekvieno nuskaitynėti?
Gerai būtų pavyzdukas. |
|
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 13, 20:56 |
|
|
|
pirma reikia perskaityti visu irenginiu adresus, paskui gali kreiptis i kuri reikia pagal adresa.
isvs kai pajungta daugiau nei vienas aparatas tai jau sudetingiau.
kaip ta daryti pakaytk MAXIM-ic puslapyje.
o pavyzdys i cia netilptu |
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 13, 21:06 |
|
|
|
Jei pajungti keli davikliai, iš kur galima nuspręsti koks adresas kuriam priklauso? |
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 13, 21:12 |
|
|
|
gal ant mikroshemos parasyta?
jei neparasyta tek dedukciniu metodu ieskoti.
pajungi po viena ir uzsirasai koks jo adresas. |
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 13, 22:02 |
|
|
|
Tikriausiai ir yra parašyta ant mikroschemos:
DALLAS
18B20
0628C3
+483AE
Tai manau 0628C3 yra adresas. |
|
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 14, 13:49 |
|
|
|
Su CodeVision AVR viskas labai paprasta:
/* Multipoint thermometer with LCD display
using the Maxim DS18B20
1 Wire bus temperature sensors
CodeVisionAVR C Compiler
(C) 2000-2005 HP InfoTech S.R.L.
www.hpinfotech.ro
Chip: ATmega8515
Memory Model: SMALL
Data Stack Size: 128 bytes
THE ATmega8515 CLOCK FREQUENCY MUST BE 3.6864 MHz
The DS18B20 sensors are connected to
bit 6 of PORTA of the ATmega8515 as follows:
[DS18B20] [STK500 PORTA HEADER]
1 GND - 9 GND
2 DQ - 7 PA6
3 VDD - 10 +5V
All the temperature sensors must be connected
in parallel
AN 4.7k PULLUP RESISTOR MUST BE CONNECTED
BETWEEN DQ (PA6) AND +5V !
*/
#asm
.equ __w1_port=0x1b
.equ __w1_bit=6
#endasm
/* Use an 2x16 alphanumeric LCD connected
to PORTC as follows:
[LCD] [STK500 PORTC HEADER]
1 GND- 9 GND
2 +5V- 10 VCC
3 VLC- LCD contrast control voltage 0..1V
4 RS - 1 PC0
5 RD - 2 PC1
6 EN - 3 PC2
11 D4 - 5 PC4
12 D5 - 6 PC5
13 D6 - 7 PC6
14 D7 - 8 PC7
*/
#asm
.equ __lcd_port=0x15
#endasm
#include <lcd.h> // LCD driver routines
#include <ds18b20.h>
#include <delay.h>
#include <stdio.h>
char lcd_buffer[33];
/* maximum number of DS18B20 connected to the 1 Wire bus */
#define MAX_DEVICES 8
/* DS18B20 devices ROM code storage area */
unsigned char rom_code[MAX_DEVICES][9];
main()
{
unsigned char i,j,devices;
lcd_init(16);
lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo");
delay_ms(2000);
lcd_clear();
/* detect how many DS18B20 devices
are connected to the 1 Wire bus */
devices=w1_search(0xf0,rom_code);
sprintf(lcd_buffer,"%u DS18B20\nDevice detected",devices);
lcd_puts(lcd_buffer);
delay_ms(2000);
/* display the ROM codes for each device */
if (devices)
{
for (i=0;i<devices;i++)
{
sprintf(lcd_buffer,"Device #%u ROM\nCode is:",i+1);
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(2000);
lcd_clear();
for (j=0;j<8;j++)
{
sprintf(lcd_buffer,"%02X ",rom_code[i][j]);
lcd_puts(lcd_buffer);
if (j==3) lcd_gotoxy(0,1);
};
delay_ms(5000);
};
}
else
while (1); /* stop here if no devices were found */
/* configure each DS18B20 device for 12 bit temperature
measurement resolution */
for (i=0;i<devices;)
if (!ds18b20_init(&rom_code[i++][0],20,30,DS18B20_12BIT_RES))
{
sprintf(lcd_buffer,"Init error for\ndevice #%u",i);
lcd_clear();
lcd_puts(lcd_buffer);
while (1); /* stop here if init error */
};
/* measure and display the temperature(s) */
while (1)
{
j=1;
for (i=0;i<devices;i++)
{
sprintf(lcd_buffer,"t%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(500);
};
};
} |
|
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 14, 16:02 |
|
|
|
Jei portu turi pakankamai tai pats paprasciausias budas yra kabinti 1 termometra ant vienos linijos. Tokiu atveju nereikia gauti adreso, gali nuskaitineti temperatura. Kaip 64bitu unikalus adresas nuskaitomas esant daugiau irenginiu pilnai aprasyta datasheete. |
|
_________________ -----
That's what she said. |
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 14, 16:43 |
|
|
|
nemanau kad ta daryti verta, reikes dauglaidu be reikalo, ir bus sudetingaiu prideti daugiau davikliu. |
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 14, 18:49 |
|
|
|
Tik del tingejimo aiskintis kaip adresuoti, padariau 1 termometras per 1 koja.. kita vertus galima rasti ir privalumu, tarkim atskirais laidais isvedziota, patikimiau, viena nutraukus, sugadinus kiti rodys. |
|
_________________ -----
That's what she said. |
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 14, 19:17 |
|
|
|
nebutinai taip, kadangi 5 laidai tai tikimybe kad kas nors suges irgi 5 kartus didesne |
|
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 15, 06:29 |
|
|
|
Paprasciausiai issiskaidyk savo uzduoti i kelis etapus. Po reseto pagal aprasyma (algoritma nesunkiai rasi pdf apie ds) padarai davikliu paieska. Susirasai davikliu adresus i eproma arba palieki rame (eprome sudetingiau rasyt, bet po to paprasciau). Arba su kokia knopke issikviesk funkcija kuri iesko davikliu ir juos suraso i eeproma. O jau tada apklausinek reikiamus adresus. Ant korpuso adresas nesiraso. Yra kompine proga delfiu rasyta, inete ji laisvai radama, kuri moka per coma imt temperatura is daviklio tiesiai ir moka numeri jo parodyt. Gali pasiieskot ir naudot nuskaitytus adresus
Pagal daviklio numeri galim aidentifikuot koks konkreciai daviklis. DS18s20 ir ds18b20 siektiek kitaip persiskaiciuoja temepraturos, atkreipk demesi ir i tai. Kai vienu metu maisyti davikliu tipai reikia juos atitinkamai ir perskaiciavinet |
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 15, 08:46 |
|
|
|
Reikės bandyti ieškoti ts programos. Tikiuosi pavyks |
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 17, 18:03 |
|
|
|
Kolkas neradau programėlės dirbančios su DS18B20. |
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 17, 22:36 |
|
|
|
Pasiknaisiosiu po favoritus darbe, bet jauciu nebebus islike.
Siaip korektiskiausia daryt taip kaip priklauso - atlikt davikliu paieska ir tik tada juos klausinet. Neik paciu lengviausiu keliu, eik teisingu keliu |
|
|
|
|
|
|
Atmega16 ir DS18B20 |
Parašytas: 2007 06 18, 20:20 |
|
|
|
Galvoju ir aš, kad neatlikus paieškos imti iš daviklių duomenis yra nesamonė.
Bandau panaudoti Dallas 1-Wire Library. Yra tokia funkcija dallasFindDevices. Kaip ją naudojant gauti daviklių kiekį ir adresą?
Kodas: |
u08 dallasFindDevices(dallas_rom_id_T rom_id[])
{
u08 num_found = 0;
dallas_rom_id_T id;
// reset the rom search last discrepancy global
last_discrep = 0;
done_flag = FALSE;
// check to make sure presence is detected before we start
if (dallasReset() == DALLAS_PRESENCE)
{
// --> stang
//while (dallasFindNextDevice(&rom_id[num_found]) && (num_found<DALLAS_MAX_DEVICES))
// num_found++;
// continues until no additional devices are found
while (dallasFindNextDevice(&id) && (num_found<DALLAS_MAX_DEVICES))
memcpy(&rom_id[num_found++], &id, 8);
}
return num_found;
} |
|
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|