Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Převod z desítkové do dvojkové soustavy
Jdi na stránku Předchozí  1, 2, 3, 4, 5  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: čt březen 09 2017, 12:30    Předmět: Citovat

FHonza napsal(a):
Protože 70 je ASCII hodnota písmena F. Použij nějakou funkci která převede číslo na text. Třeba itoa

To nemohu použít protože mikroC to nezná a vůbec jsou takové funkce náročné na paměť a taková architektura jako je PIC 16F628A to nejde dohromady
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3697
Bydliště: Praha

PříspěvekZaslal: čt březen 09 2017, 13:06    Předmět: Citovat

Není to zvlášť optimalizované, nicméně pro 8 bitové hodnoty můžete použít následující:
kód:
char* si8toa(signed char value, char* str)
{
    if(value < 0)
    {
        *str++ = '-';
        value *= -1;
    }
    return u8toa(value, str);
}

char* u8toa(unsigned char value, char* str)
{
    *str++ = '0' + value / 100;
    *str++ = '0' + (value / 10) % 10;
    *str++ = '0' + value % 10;
    *str = 0;
    return str;
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: čt březen 09 2017, 13:33    Předmět: Citovat

Já jsem velká lama Vozeďbouch a velice se omlouvám tam stačilo místo extrahování jednotlivých číslic použít funkci
kód:
IntToStr(temp,str);
   uart1_write_text( str);

Ale nic se nemění na tom že s čidlem to pořád nekomunikuje v reálu v simulátoru jak je vidět v příloze to funguje
diky



vypis na terminál1.jpg
 Komentář:

Stáhnout
 Soubor:  vypis na terminál1.jpg
 Velikost:  263.89 kB
 Staženo:  101 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2652

PříspěvekZaslal: čt březen 09 2017, 18:37    Předmět: Citovat

No já nevím, ale vykašlal bych se na simulátory a virtuální terminály.
Vezmi desku, kde máš PIC a DS18x20. Do PICa nahrej asi takovýto program:

UART_Init (9600);
k1:=50;
k2:=70;
repeat
UART1_Write_Text("Ahoj, posilam 50 a 70");
UART1_write (k1);
UART1_write (k2);
delay_ms (1000);
until false;

Připoj to k PC na COMx a spusť nějaký terminál na tento COM.

Pokud přijmeš v terminálu na PC každou sekundu text "Ahoj ..." a dvě konstanty (50 a 70 nebo 2 a F), tak Ti funguje přenos mezi PICem a PLC.
Teprve pak bych ladil připojení čidla k PICu, jeho nastavení (rozlišení), spuštění konverze a přepočet hodnot z čidla.

Petr
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: pá březen 10 2017, 10:12    Předmět: Citovat

Tak úkol splněn i když trochu jinak ale šlo o to dokázat nebo se přesvědčit že funguje přenos mezi PICem a PLC. Já myslím že funguje
kód:
void main() {
    char str[17];
    unsigned int temp;
    unsigned int temp_s,temp_d,temp_j,zbytek,kons;
    TRISA1_bit = 1;         //uprava tlacitko
    CMCON      = 0x07;

    Sound_Init(&PORTA, 0);
    Sound_Play(500, 1000);
    UART1_Init(9600);       // If you see greek alpha letter try typing 178 instead of 223
    UART1_Write_text("Teplomer v.1 3.2017\n\r");
    // main loop - in the
    do {
        //--- Perform temperature reading
        Ow_Reset(&PORTA, 2);          // Onewire reset signal
        Ow_Write(&PORTA, 2, 0xCC);    // Issue command SKIP_ROM
        Ow_Write(&PORTA, 2, 0x44);    // Issue command CONVERT_T
        Delay_ms(1000);               // puvodne 120

        Ow_Reset(&PORTA, 2);          // Onewire reset signal
        Ow_Write(&PORTA, 2, 0xCC);    // Issue command SKIP_ROM
        Ow_Write(&PORTA, 2, 0xBE);    // Issue command READ_SCRATCHPAD

        temp =  Ow_Read(&PORTA, 2);
        temp += Ow_Read(&PORTA, 2)<<8;
        temp= temp /16;
        temp_s = temp / 100;
        zbytek = temp % 100;
        temp_d  = zbytek / 10;
        temp_j = zbytek % 10;
        IntToStr(temp,str);
         uart1_write_text( str);
         uart1_write_text("  Teplota  ");
        kons = 70+50;      // ******konstanta*****
        IntToStr(kons,str);
        // word_to_bin(tempi, str);
         //Uart1_write_text(str);
         uart1_write(temp_s+48);
         uart1_write(temp_d+48);
         uart1_write(temp_j+48);
         uart1_write_text(" Soucet 70+50 = ");
         uart1_write_text( str);

        //UART1_Write_text(str);
        UART1_Write_text("\n\r");

        if (temp == 40)
            Sound_Play(980,1000);
        }

        Delay_ms(500);

    } while (1);
}

i když se ukázalo že s proměnné temp leze hodnota "4095" i když je tam čidlo je nebo není Question díky



Hyperterminal1.jpg
 Komentář:

Stáhnout
 Soubor:  Hyperterminal1.jpg
 Velikost:  249.98 kB
 Staženo:  105 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2652

PříspěvekZaslal: pá březen 10 2017, 15:02    Předmět: Citovat

Jaký používáš procesor ? 16F628A?
Zkus ještě toto:

**********************
Ow_Reset(&PORTA, 2); // Onewire reset signal
Ow_Write(&PORTA, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 2, 0x44); // Issue command CONVERT_T

j1 := 0; //j1 je prom. typu byte
Repeat // end of conversion cycle is
j1 := ow_read(porta,2); // indicated by a non-zero
Until j1 > 0; // output to polling

Ow_Reset(&PORTA, 2); // Onewire reset signal
Ow_Write(&PORTA, 2, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 2, 0xBE); // Issue command READ_SCRATCHPAD

temp1 = Ow_Read(&PORTA, 2);
temp2 = Ow_Read(&PORTA, 2);

IntToStr(temp1,str);
uart1_write_text( str);
IntToStr(temp2,str);
uart1_write_text( str);

**********************

Prostě pošli do PC surovou teplotu z 18B20 a zkus čidlo přitom trochu zahřát, zdali se bude údaj, přenesený do PC, měnit.
Pak bych (ale možná je to blbost), zkusil nastavit na začátku port A jako vstupní (TRISA=255). Ale možná je to nastaveno po restartu automaticky, fakt nevím.
Namísto pevně nastavené doby je ve výše zmíněném kódu čekací smyčka, kdy se vyhodnocuje vývod, kde je čidlo. Po provedení konverze je tam něco mimo nuly. Pokud by se Ti na PC nic neobjevilo tak by to znamenalo, že nedojde k ukončení konverze v čidle a program se točí stále dokola na testování portu A.2 na rozdílnost od nuly.

Petr
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: pá březen 10 2017, 16:35    Předmět: Citovat

Tak že výsledek je takový viz příloha v simulátoru je to jiné procák je PIC16F628A


vypis na terminál2.jpg
 Komentář:

Stáhnout
 Soubor:  vypis na terminál2.jpg
 Velikost:  213.62 kB
 Staženo:  157 krát


simulátor.jpg
 Komentář:

Stáhnout
 Soubor:  simulátor.jpg
 Velikost:  187.05 kB
 Staženo:  129 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2652

PříspěvekZaslal: so březen 11 2017, 9:08    Předmět: Citovat

OK, celý kód zapoj ještě do nekonečné smyčky a dej se schéma zapojení.
Tohle by fungovat mělo.

Petr
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: so březen 11 2017, 10:52    Předmět: Citovat

Udělal jsem všechno co bylo třeba a schéma je tam taky viz příloha, obávám se že ty nuly v terminálu PC nevěští nic dobrého Question nebo se mýlím ? díky


vypis na terminál3.jpg
 Komentář:

Stáhnout
 Soubor:  vypis na terminál3.jpg
 Velikost:  284.85 kB
 Staženo:  153 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2652

PříspěvekZaslal: so březen 11 2017, 12:49    Předmět: Citovat

Tak to nevím. Jedině vadné čidlo (i když je divné, jak jsi psal, že v zapojení s displejem funguje) nebo je špatně zapojené.

Zkus ještě jednu věc. Do smyčky, kde je podmínkou změna hodnoty j1, vlož delay_ms(1) a přičítej jedničku do nějaké proměnné. Tím se dozvíš, jak dlouho se musí čekat na převod v čidle. Převod by měl trvat:
pro 9 bitů: 93,75ms; pro 10 bitů 187,5ms; pro 11 bitů 375 ms a pro 12 bitů 750ms.
No a pak tuto proměnnou převeď do stringu a pošli ji do PC. Jo - nezapomeň proměnnou po odeslání do PC vynulovat.
Taky můžeš jednotlivé byty, posílané do PC, oddělit nějakým řetezcem (B1 pro první byte z čidla, B2 pro druhý byte a CK pro čas konverze), ať je jasné, co je co.

Taky mě zaráží, že ve fyzickém terminálu dostaneš nuly, ale v SW terminálu máš 5/80 a 5/176.

Taky můžeš zkusit použít jiný vstup - nejlépe z portu B.

Pokud najdu stejný procesor, tak bych mohl večer zkusit nainstalovat MikroC a zkusit to ve své vývojové desce.

Edit - ještě mě napadlo podívat se na tabulku pro převod teploty do 0/1. Teplota 85°C, což je výchozí teplota, je právě 5/80. TAkže to vypadá, že ve Tvém případě ještě neproběhla žádná konverze. Ale je otázka, co si simulátorový terminál vymyslí. Spíše bych věřil tomu Hyperterminálu.

A taky můžeš zkusit jinou věc - odpojit čidlo. Když to uděláš, neměl bys do terminálu dostat žádnou hodnotu, neboť by se proměnná j1 nikdy neměla dostat nad nulu.

Petr



18B20 teplota.png
 Komentář:

Stáhnout
 Soubor:  18B20 teplota.png
 Velikost:  89.17 kB
 Staženo:  134 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2652

PříspěvekZaslal: so březen 11 2017, 21:22    Předmět: Citovat

Tak jsem to nakonec dal dohromady, ale že mi to dalo zabrat. Už jsem myslel, že Tvůj výstup 5/80 je virový a já jsem to chytil taky. Nakonec se ukázalo, že je to vadným čidlem (resp. několika čidly). Naštěstí jsem našel ještě jedno a s tím to funguje. Ale kam mi zase doma dali těch 50 čidel z Číny, to fakt nevím. Ale když se zeptám, dostanu klasickou odpověď "No já jsem nic neuklízela".
V příloze posílám svůj program (v Pascalu Sad) a sken hyperterminálu.
Je zajímavé, že i bez čidla program na kontrole proměnné j1 neskončí v nekonečné smyčce, ale bez čidla je čas konverze 1 smyčka. S čidlem a nastaveným převodem 12b (7F) je doba převodu okolo 523 cyklů. Při nastavení 9b (1F) je doba převodu 66 cyklů.
Abych nezapomněl - procesor mám 16F874A, čidlo 18B20 a je připojeno vstup E2 va vývojové desce EasyPIC4 (přikládám i částečné schéma zapojení).

Petr



Kontrola.jpg
 Komentář:

Stáhnout
 Soubor:  Kontrola.jpg
 Velikost:  219.77 kB
 Staženo:  100 krát


18B20 EPIC4.jpg
 Komentář:

Stáhnout
 Soubor:  18B20 EPIC4.jpg
 Velikost:  40.53 kB
 Staženo:  130 krát


Program2.jpg
 Komentář:

Stáhnout
 Soubor:  Program2.jpg
 Velikost:  287.54 kB
 Staženo:  133 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: ne březen 12 2017, 12:41    Předmět: Citovat

Tady jsem našel na PIC12F629 http://pandatron.cz/?566&teplotni_cidlo_ds18b20_ve_spojeni_s_pic12f629 hotové řešení i ze zdrojákem ba i přeložený hex soubor, podporuje to programátor MPLAB IDC2 kterého klon mám a používám.Nic méně mě to nedá proč to moje zapojení které tady řeším nefunguje kde dělám chybu?.Zapojení s LCD které mám na nepajivém poli a které mi de facto to pole obsazuje a na které se dlouhou dobu prášilo tím chci říct že si na podrobnosti nepamatuji to funguje ,a dokonce mám zdrojový kód v prostředí mikroC PRO for PIC ale bohužel si nevzpomínám jestli jsem v tom něco změnil nebo ne, zdrojový kód je v příloze .Samotný procesor PIC16F628A mám druhý kus v tom co zkouším teplotu zobrazovat na terminálu, jestli je v něm problém to mi se zdá nepravděpodobné. díky
edit
Ještě malá poznámka : co mě funguje to zapojení s tím displejem tak to čidlo je DS1820místo jak jsem se domníval DS18B20 po změně v zapojení s displejem tak na displeji to ukazovalo 200 stupňů mělo to tendenci snižování.Ale pořád platí že i když zkusmo jsem změnil čidlo na terminál zapojení DS1820 tak se to chová stejně pořád samé nuly



LCDDS18B20.pdf
 Komentář:

Stáhnout
 Soubor:  LCDDS18B20.pdf
 Velikost:  233.09 kB
 Staženo:  130 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
petrfilipi



Založen: Sep 13, 2005
Příspěvky: 2652

PříspěvekZaslal: po březen 13 2017, 8:38    Předmět: Citovat

Popis rozdílů 1820 a 18B20 (18S20)je tady: https://www.maximintegrated.com/en/app-notes/index.mvp/id/4377

Tady je něco o tom, že mají jinak zapojené registry s teplotou: http://www.picaxeforum.co.uk/showthread.php?9603-DS18B20-v-DS1820

A tady je fórum Mikroelektroniky a výsledek je takový, že když tazatel vyměnil čidlo 1820 za 18B20, tak mu to funguje: https://forum.mikroe.com/viewtopic.php?f=88&t=49931

Petr
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: pá březen 24 2017, 13:17    Předmět: Citovat

Už mě to funguje já jsem se úplně pos***** víš kde jsem udělal chybu Question Vozeďbouch to je pro mně na zamyšlení ,čidlo jsem zapojoval obráceně plus na minus a mínus na plus samozřejmě jsem jedno poslal do křemíkových lovišť


teplota v terminalu1.jpg
 Komentář:

Stáhnout
 Soubor:  teplota v terminalu1.jpg
 Velikost:  273.1 kB
 Staženo:  126 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
markoni



Založen: Oct 30, 2006
Příspěvky: 2310
Bydliště: Poblíž Zlína

PříspěvekZaslal: po březen 27 2017, 11:12    Předmět: Citovat

Ještě taková maličkost jak poslat na uart znak pro stupně ° ? na virtuálním terminálu to napíše nějakou kravinu díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4, 5  Další
Strana 4 z 5

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.21 sekund