 |

|
|
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 12 25, 00:54. 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
|
|
|
Puslapis 6 iš 6 Pereiti prie Atgal 1, 2, 3, 4, 5, 6 |
|
 |
Atmega16 ir DS18B20 |
Parašytas: 2012 07 25, 07:04 |
|
|
|
|
zmogui taip - man ne. As saugau visus 64 davikliu parodymus ir po to juos naudoju
Atmega savu laiku turejo resursu pakankamai, dabar ir stm32vet projektui jau resursai arteja prie ribos. Atmintim svaistytis galima tik kai procas nieko neveikia |
|
|
|
|
|
 |
 |
Atmega16 ir DS18B20 |
Parašytas: 2012 07 25, 07:45 |
|
|
|
|
kazka cia joni skiedi, katilui valdyti, net jei ir rysys su internetu idiegtas, uztenka vos ne atmega168/328, atatinkamai atmega16/162/32.
turbut neefektyviai operatyvke svaistai constantoms, ypac stringams saugoti.
duomenis saugoti visada galima maziau vietos uzimanciame formate, o isvedineti tokiame, kokio reika. pvz, jei reikia daug perskaiciuoti, bet nereikia daug zenklu, galima laikyti BCD byte ar word fiksuoto kablelio formate, visiskai nebutina float.
jei reikia sulyginti su ADC reiksmemis, apatine ir virsutine riba galima saugoti trijuose baituose, o sulyginimo procedura nepatampa labai reikli CPU laiko.
daugeli konstantu galima laikyti eeprom, nes nuskaitymas is jo nera ilgai trunkantis, ilgai tik irasinejama. |
|
|
|
|
|
 |
 |
Atmega16 ir DS18B20 |
Parašytas: 2012 07 25, 09:20 |
|
|
|
|
tai as ir laikau ne floate. Laikau shorte. Arme nera vidinio eepromo, viskas sedi fliashe, isorini nera noro kabint. Ir nera poreikio.
Atmega savu laiku gerai buvo, bet siais laikais uz tokius resursus ir tokia kaina ji praradus patrakluma. Be to ne vien katilines valdyt prireikia. Pirkt kazkokia super duper mega naujiems projektams tik su dviem usartais uz labai brangiai - kokia prasme? Yra siuolaikiskesniu procesoriu. O ka i rama ir fliasha kraut - ir be stringu zinau Jei taip samprotaut, kam PC jums su 4Gb, buvo ir su 4Mb kompai kazkada, ne taip senai 512Mb buvo prabanga, uzteko viskam. Deja, poreikiai keiciasi. O atminti svaistyt vien del to kad jos "dar pakanka" - nekorektiska
Aplamai prasidejo fleimas. Siulau palikt sita diskusija ramybej, nes ji neatitinka temos
P.S. Usartu reikia kaip tik i tema - per juos labai graziai DMA pagalba galima pasidaryt 1w aparatini draiveri, nereikia niekada draust interaptu kad laikus skaiciuot (pabandyk ta ant megos padaryt, kur ne tik usartu mazai, bet ir taimeriu tik keletas) |
|
|
|
|
|
 |
 |
Atmega16 ir DS18B20 |
Parašytas: 2012 07 29, 11:18 |
|
|
|
|
Ačiū visiems, pavyko pasiekti ko norėjau
Dabar susidūriau su kita bėda - 1-Wire search algoritmu. Bandau suprasti kaip ten viskas vyksta ir pačiam bandyti jį įgyvendinti. Bet visų pirma, noris turėti kažkokį veikiantį pavyzdį pradžioj...
Taigi, situacija tokia: Proteuse yra LCD, Atmega16 ir 3 DS18B20 jutikliai pakabinti ant vieno laido.
Pradinis tikslas: Nuskaityti 1 (bet kurio) iš trijų daviklių ROM adresą ir vėliau kreipiantis į jį su MATCH ROM, gauti iš jo temperatūrą ir išvesti į LCD.
Turimas kodas (kompiliuoja, bet niekas neveikia Proteus'e):
| Kodas: |
#define SEARCH_FIRST 0xFF
#define PRESENCE_ERR 0xFF
#define DATA_ERR 0xFE
#define LAST_DEVICE 0x00
sbit LCD_RS at PORTC2_bit;
sbit LCD_EN at PORTC3_bit;
sbit LCD_D4 at PORTC4_bit;
sbit LCD_D5 at PORTC5_bit;
sbit LCD_D6 at PORTC6_bit;
sbit LCD_D7 at PORTC7_bit;
sbit LCD_RS_Direction at DDC2_bit;
sbit LCD_EN_Direction at DDC3_bit;
sbit LCD_D4_Direction at DDC4_bit;
sbit LCD_D5_Direction at DDC5_bit;
sbit LCD_D6_Direction at DDC6_bit;
sbit LCD_D7_Direction at DDC7_bit;
unsigned int short n=0;
unsigned int Bufflcd [9];
int Temp_bytes [9];
unsigned short Temp_sign;
unsigned int Temp_value;
unsigned int Temp_fract;
unsigned char id[8],diff,i;
//******************************** SEARCH_ROM***********************************
unsigned char One_Wire_Search( unsigned char diff, unsigned char *id )
{
unsigned char i, j, next_diff;
char b;
Ow_Reset(&PORTA, 0); // resetas
Ow_Write(&PORTA, 0, 0xF0); // Issue command SEARCH_ROM
next_diff = LAST_DEVICE; // unchanged on last device
i = 8 * 8; // 8 bytes
do{
j = 8; // 8 bits
do{
b = Ow_Read(&PORTA, 0); // read bit
if( Ow_Read(&PORTA, 0) ){ // read complement bit
if( b ) // 11
return DATA_ERR; // data error
}
else{
if( !b ){ // 00 = 2 devices
if( diff > i ||
((*id & 1) && diff != i) ){
b = 1; // now 1
next_diff = i; // next pass 0
}
}
}
Ow_Write(&PORTA, 0, b); // write bit
*id >>= 1;
if( b ) // store bit
*id |= 0x80;
i--;
}while( --j );
id++; // next byte
}while( i );
return next_diff; // to continue search
}
//****************************Display temperature*******************************
void Execution ()
{
Temp_sign = Temp_bytes [1];
Temp_sign = Temp_sign >> 3;
if (Temp_sign == 31)
{
LCD_Out (1, 1, "-");
}
else
{
LCD_Out (1, 1, "+");
Temp_value = Temp_bytes [0] >> 4;
Temp_value = Temp_value | (Temp_bytes [1] << 4);
ByteToStr(Temp_value, Bufflcd);
LCD_Out (1,2, Ltrim(Bufflcd));
LCD_Chr_CP ('.');
Temp_fract = Temp_bytes [0] << 4;
Temp_fract = Temp_fract >> 4;
Temp_fract = (Temp_fract &= 0xF)*625;
Temp_fract = Temp_fract/100;
ByteToStr(Temp_fract, Bufflcd);
LCD_Out_CP (Ltrim(Bufflcd));
}
}
//************************************ MAIN ************************************
int main ( void )
{
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);
One_Wire_Search(diff , id); //kvieciam SEARCH_ROM
for (;;) // Loop forever
{
Ow_Reset(&PORTA, 0); // Onewire reset signal
Ow_Write(&PORTA, 0, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 0, 0x44); // Issue command CONVERT_T
Delay_ms(800);
Ow_Reset(&PORTA, 0);
Ow_Write(&PORTA, 0, 0x55); // Issue command MATCH_ROM
for (n=0; n<8; n++)
{
Ow_Write(&PORTA, 0, id[n]);
}
Ow_Write(&PORTA, 0, 0xBE); // Issue command READ_SCRATCHPAD
for (i=0; i<9; i++)
{
Temp_bytes [i] = Ow_Read(&PORTA, 0);
}
Execution ();
}
}
|
SEARCH_ROM dalis paimta iš interneto. Nesu stiprus programavime, tai sudėtinga man čia... Taigi, kas galėtų būti blogai čia? Gal išvis viską ne taip darau? |
|
|
|
|
|
 |
|
 |
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 |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Must have farming mods
Farming simulator modhub,
Best farming simulator mods |
|

|
 |