DS18B20+atmega8+2digit 7segment/problem s algoritmom

C,C++,C#

Moderátori: psichac, Moderátori

Firen
Nový člen
Nový člen
Príspevky: 52
Dátum registrácie: 29 Okt 2010, 00:00
Vek: 31

DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Firen » 04 Jan 2015, 20:26

Zdravím.

Akurát programujem jednoduchý teplomer, kde sa mi bude ukazovať teplota na 2 digit. 7 segmente. Hlavný program vyzerá takto:

int main(void)
{
char text[17];
DDRD=0b11111111; //nastavenie portu D na výstup
DDRB=0b11111111; //nastavenie portu B na výstup

while(1)
{
ds18b20_get_temp(text); //text bude mať nejakú hodnotu podľa teploty (napr. 12)

/*niečo niečo niečo....*/

_delay_ms(200);
}
}


Ide o to, že do poľa char text[17] mi vypľuje digitálne čidlo nejakú hodnotu. Potrebujem spraviť nejako šikovne algoritmus, ktorý spraví, že ak bude pole trebárs 12, tak mi displej vypíše 12. Lenže ak chcem vypísať napr. to číslo 12, tak musim zapisať

PORTD|=255;
PORTD&=0b11001111; // presné rozsvietenie segmentov na prvom digite podľa čísla 1
PORTB|=255;
PORTB&=0b00010011; // presné rozsvietenie segmentov na druhom digite podľa čísla 2

Pričom portd je vlastne ten prvý digit a portb je druhý digit. Ja som si spravil jednotlivo od 0-9 oba digity do podprogramov, lenže teraz by som musel robiť v hlavnom programe podmienku if 99x (pre výpis čísel od 0 až po 99) a to je hlúposť na n-tú. Viete mi nejako poradiť? Mne žiadne šikovné riešenie nenapadá.
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Hinsi » 04 Jan 2015, 20:33

ách jo, to je furt dokolečka... Hlavně že máme knihovničku na ds18b20 ale číslo vypsat neumíme. Ten svět se řítí do řiti :mrgreen:

A v čem je jako teda problém? Že není knihovnička, která vypíše string na dvě sedmisegmentovky? Jaj, to je ale smůla...

Rozsvítit LEDky segmentovky umíš? Umíš na ně zobrazit číslici? Umíš udělat tabulku hodnot (aspoň pomocí switch-case)? Umíš převést znak na číslo?

Tak teda co nejde? Nebo to má někdo celé napsat za tebe?
0

Používateľov profilový obrázok
rudko
Power user
Power user
Príspevky: 2340
Dátum registrácie: 28 Dec 2012, 08:33
Vek: 37

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa rudko » 04 Jan 2015, 20:34

chces vediet ako prekodovat dec na 7seg kod?
urob si pole o velkosi 10 a na prislusne pozicie zapis cislo reprezentujuce tvoje zobrazenie na 7seg.
pre 1 si prepocitaj 0b11001111 na dec a zapis na poziciu jedna
pre 2 si prepocitaj 0b00010011 na dec a zapis na poziciu dva
a tak dalej

ps: nezabudni ze prva musi byt nula ;-)
edit: a ze mam dnes dobru naladu tak pokracovanie bude:

int tvojateplota;

PORTD|=255;
PORTD&=digit[tvojateplota/10]; // cislo deleno 10
PORTB|=255;
PORTB&=digit[tvojateplota%10]; // zostatok po deleni 10timi

kde digit je pole vyssie zmienene

samozrejme ze sa to da este vylepsit, ale na to uz pridi sam
0
Drink coffee. Do stupid things faster with more energy...

Firen
Nový člen
Nový člen
Príspevky: 52
Dátum registrácie: 29 Okt 2010, 00:00
Vek: 31

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Firen » 04 Jan 2015, 20:41

Hinsi napísal:ách jo, to je furt dokolečka... Hlavně že máme knihovničku na ds18b20 ale číslo vypsat neumíme. Ten svět se řítí do řiti :mrgreen:

A v čem je jako teda problém? Že není knihovnička, která vypíše string na dvě sedmisegmentovky? Jaj, to je ale smůla...

Rozsvítit LEDky segmentovky umíš? Umíš na ně zobrazit číslici? Umíš udělat tabulku hodnot (aspoň pomocí switch-case)? Umíš převést znak na číslo?

Tak teda co nejde? Nebo to má někdo celé napsat za tebe?

Samozrejme, že rozsvietiť LEDky viem, samozrejme, že zobraziť číslicu viem. Potrebujem sa len vyhnúť tomu, aby som robil 99 krát podmienku if.


Rudko díki moc! Problém je len v tom, že som dlho nerobil v C... :) Aspoň niekto mi poradí a nebude tu písať len nejaký potrhlý čech, čo si musí nohiť svoje ego!
0

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Hinsi » 04 Jan 2015, 21:46

Tohle není o nohiťění ega, ale o s prominutím absolutní tuposti a lenosti používat mozek nebo google.

To co ti radí rudko nebude navíc ani fungovat "s tím polem nahoře", protože to "pole nahoře" by sis musel prve převést na číslo a to číslo pak zas zpátky na text (jak užitečná operace), místo abys rovnou znaky z pole odečtením 48mi převedl na čísla pro jednotlivé segmentovky. Je pak jen otázkou, jak je formátovaný výstupní řetezec z té knihovničky, ale to by sis měl nastudovat a vědět, když jí používáš.
0

Používateľov profilový obrázok
rudko
Power user
Power user
Príspevky: 2340
Dátum registrácie: 28 Dec 2012, 08:33
Vek: 37

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa rudko » 04 Jan 2015, 22:05

vies mi prosimta vysvetlit preco by mal toto robit: ?

""s tím polem nahoře", protože to "pole nahoře" by sis musel prve převést na číslo a to číslo pak zas zpátky na text (jak užitečná operace)"

co musi prevadzat spat na text? aky text chces riesit pri 7 segmentovom displeji ? on potrebuje previest cisla od 0 po 9 na kombinaciu 7 bitov ktore priamo zapisuje na port a cisla vyjadrujuce tychto 7 bitov zapise do jednotlivych pozicii pola.
0
Drink coffee. Do stupid things faster with more energy...

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Hinsi » 04 Jan 2015, 22:23

Asi vidím blbě (a google vrátil špatné výsledky), ale fce ds18b20_get_temp() vrací textový řetězec a v tebou nabízením řešení používáš operace / a %. Ty snad fungují na řetězce?

Pro tvé řešení potřebuje číslo. Pochybuju, že sám přijde na to, jak z řetězce vyrobit číslo, aby ho mohl dělit, jak mu nabízíš. Navíc je to potom zbytečná operace, neboť ta funkce ds18b20_get_temp() z čísla vevnitř dělá řetězec a ty pak zase zpátky potřebuješ číslo.

Takže už to v tom vidíš, nebo ještě ne?
0

martin63
Ultimate člen
Ultimate člen
Príspevky: 1738
Dátum registrácie: 11 Máj 2008, 00:00
Bydlisko: Námestovo
Vek: 34

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa martin63 » 04 Jan 2015, 22:29

pozri si ASCII tabuľku, zíde sa ti to
0

Používateľov profilový obrázok
rudko
Power user
Power user
Príspevky: 2340
Dátum registrácie: 28 Dec 2012, 08:33
Vek: 37

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa rudko » 04 Jan 2015, 22:30

ja som mu poskytol odpoved na otazku ako zobrazit cisla na dvoch 7 seg bez 99x if. a ta je podla mna spravna. ako ja mam vediet co vracia jeho funkcia? ja som si pred asi 10 rokmi robil kniznicu na 1820ku a ta mi vracia cele cislo. a zhodou okolnosti sa myslim vola tak ako jeho, akurat namiesto 18b20 je v nazve iba 1820
0
Drink coffee. Do stupid things faster with more energy...

Hinsi
Pokročilý člen
Pokročilý člen
Príspevky: 510
Dátum registrácie: 15 Sep 2014, 15:56

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Hinsi » 04 Jan 2015, 22:31

Já něřikám že je to špatně, ale že při jeho schopnestech si s tývm řešení neporadí.
0

Firen
Nový člen
Nový člen
Príspevky: 52
Dátum registrácie: 29 Okt 2010, 00:00
Vek: 31

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Firen » 04 Jan 2015, 23:13

Chalani ja sa s tým nejako popasujem zajtra. Dík Rudko za help.


OFFTOPIC!!:

Hinsi, ty si len drzý sopliak, ktorý nevie slušne komunikovať. Máš s tým problém a všetko čo píšeš to len dokazuje. Možno by ti nezaškodilo zamyslieť sa nad sebou, ale nie som tu od toho, aby som ti dával rady. Ospravedlnenie od teba chcieť nebudem, pretože vidím ako je na tom tvoje ego, ktoré by sa za svoje chovanie neospravedlnilo. Ja ti ale odpúšťam a budem to brať len ako nevyspelú a unáhlenú reakciu na slušnú prosbu.

Ak som absolútne tupý a lenivý, navštív náš náučno-populárny youtube kanál Exsisto Sapiens čo je z latinčiny "buď múdry", alebo nájdeš pár mojich článkov na invivomagazin.sk či blogu.sme. Ak na ne budeš stačiť, pokojne tam pridaj komentár a zapoj sa do diskusie.

PS: Tu som si ťa pridal medzi ignorovaných.
0

Používateľov profilový obrázok
Tribec Zacks
Pokročilý člen
Pokročilý člen
Príspevky: 709
Dátum registrácie: 26 Jún 2010, 00:00
Bydlisko: Levice / Cork IRL
Vek: 41
Kontaktovať používateľa:

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Tribec Zacks » 04 Jan 2015, 23:44

Firen, pozri sem:
http://svetelektro.com/modules.php?name ... 85#p565985

budes na to potrebovat nejaky interrupt, skus porozmyslat aky a preco. napoveda -> aktivne segmenty pre jednotlive cislice si uloz v arrayi.
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.

Firen
Nový člen
Nový člen
Príspevky: 52
Dátum registrácie: 29 Okt 2010, 00:00
Vek: 31

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Firen » 05 Jan 2015, 09:21

Oh jasné Tribec Zacks! To mi ešte pred skúškovým hovoril spolužiak, že to by som aj vedel urobiť a je to hospodárnejšie. Vďaka! :)
0

kako
Stály člen
Stály člen
Príspevky: 307
Dátum registrácie: 07 Mar 2014, 06:38
Bydlisko: Trnava

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa kako » 05 Jan 2015, 11:47

tu mas hotovy projekt bez kniznice na 4 displeje

http://radioparty.ru/prog-avr/program-c ... n2-ds18b20

da sa to urobit na dva :)
0
ho

Firen
Nový člen
Nový člen
Príspevky: 52
Dátum registrácie: 29 Okt 2010, 00:00
Vek: 31

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Firen » 05 Jan 2015, 15:46

Už som to poriešil tak trochu svojským spôsobom. Len mám problém, že mi stále vypisuje chybu undefined...

Obrázok

Pričom keď to tam píšem, tak mi dá dokonca na výber - teda vie, že to tam je, ale keď dám build, tak vypíše chybu, že je to "undefined"...a úplne hore mám #include "ds18b20.h".
0

xpert
Stály člen
Stály člen
Príspevky: 112
Dátum registrácie: 28 Dec 2014, 01:24
Bydlisko: okres NZ

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa xpert » 05 Jan 2015, 16:23

vidim ze mas otvorenu kniznicu, ale nevidim ju v solution Exploreri. Ten je v pravej casti programu. Klikni pravym tl. mys na "teplomeris" (vedla tej zltej ikonky) a "add existing item" a pridaj tam .c a .h file toho DS.

EDIT: warning odstranis tak, ze zase kliknes na "teplomeris" (vedla zlzej ikonky v Solution explorer) vyberies "properties". Dalej "Symbols" a sem do prvej tabulky (Defined symbols -D ) pridas "F_CPU=1000000" (alebo inu frekvenciu, podla toho aku pouzivas)
0

Firen
Nový člen
Nový člen
Príspevky: 52
Dátum registrácie: 29 Okt 2010, 00:00
Vek: 31

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Firen » 05 Jan 2015, 16:29

Veľmo ďakujem! :)

EDIT: Hmm spravil som to a píše to stále tú chybu. Lenže to .h asi treba dať aj do librares. Keď to tam dám, tak mi ale hádže novú chybu, "cannot find -lds18b20.h". (Tie warningy sú opravené. :) )
0

xpert
Stály člen
Stály člen
Príspevky: 112
Dátum registrácie: 28 Dec 2014, 01:24
Bydlisko: okres NZ

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa xpert » 05 Jan 2015, 16:54

a tie ds18b20.h a ds18b20.c su fyzicky v tej istej zlozke ako teplomeris.c ?? ak nie tak ich tam nakopiruj. Inak by si musel prepisat #include
0

Firen
Nový člen
Nový člen
Príspevky: 52
Dátum registrácie: 29 Okt 2010, 00:00
Vek: 31

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa Firen » 05 Jan 2015, 17:28

Obrázok

Áno, takto to tam mám. Netreba niečo dať ešte do toho libraries?
0

xpert
Stály člen
Stály člen
Príspevky: 112
Dátum registrácie: 28 Dec 2014, 01:24
Bydlisko: okres NZ

Re: DS18B20+atmega8+2digit 7segment/problem s algoritmom

Príspevok od používateľa xpert » 05 Jan 2015, 17:35

hmm nic ma nenapada. Do libraries nedavam nic. Skus este "rebuild solution", pripadne sem nahraj projekt.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok