 |

|
|
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 18, 19:32. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » C pradmenys
|
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 2 iš 2 Pereiti prie Atgal 1, 2 |
|
 |
 |
 |
C pradmenys |
Parašytas: 2006 01 24, 14:08 |
|
|
|
|
na idomiai jus dirbate ))
naidojate kokiastai standartines funkcijas net nezinodami kaip jos istikro elgiasi vienu ar kitu atveju...
beabejo jeigu sprintf negli isvedineti duomenu is tam tikros atminties tai ji to ir nepadarys... kaip zinia is eeprom duomenys yra skaitomi per registus ... tai sitoje vietore kaip minimum reiktu pasirasyti kokianors funkcija kur reikiamus duomenis skaitytu is eeprom...
kitas dalykas nelabai suprantu sprintf funkcijos panaudojimo sioje vietoej ..
nes jeigu aprisrasai funkcija kuri skaito duomenis is eeprom pvz:
void eeprom_read_data(unsigned char dest,unsigned char src,insigned char length)
galesi duomenis i buferi su kelti labai paprastai
eeprom_read_data(lcd_buffer,eeprom_adresas,ilgis);
ir gauni kad duomenys jau sukopijous i lcd_buffer
o tada dek juos i lcd
va kaip pvz funkcija duomenis is eeprom paimti
void eeprom_read_bl(unsigned char *dest , unsigned char *str, unsigned char i)
{
while (i--)
*(dest + i) = eeprom_read(str + i);
}
}
unsigned char eeprom_read(unsigned char *Add)
{
while(eeprom_reg & (1 << EEWE));
eeprom_AddL = (unsigned int)Add;
eeprom_reg |= 0x01;
return (eeprom_Data);
}
cia naudojami kintamieji
#define eeprom_reg (*(volatile unsigned char *)0x3C)
#define eeprom_AddL (*(volatile unsigned int*)0x3E )
#define eeprom_Data (*(volatile unsigned char *)0x3D )
na beje cai adresas turetu tikti ir atmega8 bet gali ir nelabai reikia sutirkitni nes rasyta atmega16 |
|
|
|
|
|
 |
 |
C pradmenys |
Parašytas: 2006 01 24, 14:45 |
|
|
|
|
to siena:
čia ne darbas, o tik malonus laisvalaikio praleidimas
ko neišmokai jaunas būdamas, tas sunkiai daeina dabar. Bet noras žaisti dar nepraėjo, ir suprantu vis daugiau. Tikiuosi, kad su Jūsų visų patarimais ir komentarais suvoksiu viską daug greičiau  |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 01 25, 12:30 |
|
|
|
|
Na, štai viskas gavosi, tik atidžiau reikėjo pavyzdžius pastudijuoti.
O sprintf() iš tikrųjų visai nereikalinga buvo Ačiū už pagalbą! |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 05, 20:03 |
|
|
|
|
Toliau tęsiu klausimų seriją iš C pradmenų. Kompileris CodeVisionAVR, bet čia turbūt neturi tas reikšmės.
Turiu du kintamuosius:
unsigned char h, m; //h-valanos, m - minutės
man tuos du kintamuosius reikia apjungti į vieną:
unsigned int laikas;
sakykim h=0x10, o m=0x0F, man reikia padaryti, kad laikas=0x100F.
Ar yra kokia paprasta komanda tokiu būdu apjungianti duomenis? Ar reikia rašyti kokią atskirą procedūrą? |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 05, 20:17 |
|
|
|
|
| Domantas rašo: |
unsigned char h, m; //h-valanos, m - minutės
unsigned int laikas;
sakykim h=0x10, o m=0x0F, man reikia padaryti, kad laikas=0x100F.
Ar yra kokia paprasta komanda tokiu būdu apjungianti duomenis? Ar reikia rašyti kokią atskirą procedūrą? |
laikas = (h<<8 ) | m; |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 05, 20:27 |
|
|
|
|
daryk taip:
unsigned int sujungtas;
unsigned char h, m;
h=0x10; m=0x0F;
sujungtas = (h << 8 ) + m;
<< daro pastumima kairen. ta pati efekta gali gauti
sujungtas = (h * 256) + m; bet sitaip bus leciau. |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 05, 21:44 |
|
|
|
|
| Tik ką perskaičiau apie bitų perstūmimo operacijas, bet atsakymai atėjo greičiau. Geras forumas. Ačiū už pagalbą. |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 06, 10:50 |
|
|
|
|
Jeigu kam kils tokios pat problemos, tai korektiškai kodas turėtų atrodyti taip:
char h, m;
int laikas;
...
{
laikas=h;
laikas=(laikas<<8 )|m;
}
Jeigu padarytume h<<8, tai h==0, nes pagal duomenų aprašymą kintamasis yra tik 8 bitų. |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 06, 10:54 |
|
|
|
|
galima naudoti union
union{
struct{
char h;
char m;
}laikas;
short sujungtaslaikas;
}laikasjungtas;
siaip siulyciaunaudoti ne int o short tipo kintamaji.. nes short visada yra 2 baitai .. o int nevisada ... |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 06, 12:44 |
|
|
|
|
Reikės paeksperimentuoti ir patikrinti kada gaunasi mažiausias kodas. Iš princimo man užtenka h<<6, kadangi nemažai kintamųjų, tai turėtų ir kodas sumažėti.
Dar vienas klausimėlis, kaip išsiversti su sprintf() funkcija nenaudojant float tipo kintamųjų. Esmė tame, kad matuoju temperatūrą, kuri aprašoma, kaip float temp (tikslumas yra vienas skaičius po kablelio). Paprastai naudojant sprintf() funkciją, duomenų išvedimui į LCD su float kintamaisiais labai padidėja kodo apimtis. Gal čia irgi galima, kaip nors pastumdyti bitukus ir išskirti sveiką bei dešimtainę dalį? Ar viskas daug sudėtingiau? |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 06, 13:21 |
|
|
|
|
| isesmes galima .. as nelabai pamenu kaip float apsiraso binarineje formoje .. bet saip jeigu sakiciu po kablelio skaicius aiskus tai turetu tikrai sutaupyti kodo nei naudojant standartines funkcijas ... |
|
|
|
|
|
 |
C pradmenys |
Parašytas: 2006 02 06, 16:42 |
|
|
|
|
as tai siulyciau naudot
#include <stdint.h>
ir tada
uint16_t ir tt tipus naudot, kada tixliai zinai kur koks  |
|
|
|
|
|
|
 |
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 |
|

|
 |