Re: Zase Arduino - jak dostat data do přerušení
Jindrich Fucik
fulda na seznam.cz
Pondělí Leden 29 19:54:56 CET 2024
OK, tak jsem to odhadl dobře, je to SSI -> Synchronous Serial Interface
Takže bych se úplně vykašlal na magii s přerušením. Prostě v mainu budu
sledovat signál CS a pokud mi udělá low to high, tak resetnu port, abych
se syncnul a pak do něj rovnou naperu první bajt. Nejsem si jistej jak
AVRko, ale PIC má dva bajty buffer, takže bych tam na hulváta napral i
druhej bajt a zase z vesela čekal na to, až CS udělá low to high.
Všechno ostatní udělá hardware sám.
Datasheet:
https://look.ams-osram.com/m/1b628d2f3c20b9a4/original/AS5040-DS000374.pdf
Teď něco dělám s PIC16F18015. Za necelé euro obvod co má dva USARTy,
takže ten druhej rovnou použiješ na čtení reality. Odhadovaná délka
programu je max dvě stránky, z toho první bude konfigurační balast,
kterej za tebe napíše MCC. Ale je to trochu nepopulární platforma.
https://www.tme.eu/cz/details/pic16f18015-i_sn/rodina-pic-8-bitu/microchip-technology/
Dne 29.01.2024 v 16:13 Jirka Mww napsal(a):
> Je to simulace tohoto snímače
>
> https://www.vk5dj.com/hh-12.html <https://www.vk5dj.com/hh-12.html>
>
> je to pro kamaráda radioamatéra, který s tím má udělaný antenní rotátor
> , který má ale určité vůle v převodech , takže mu to při zastavení
> kmitá. Cílem je číst ten snímač HH 12 ( to mi jde dobře) a do
> elektroniky rotátoru, která je koupená a nedá se v ní nic programovat,
> posílat při zastavení simulovaný údaj, který bude to kmitání potlačovat.
> Úloha to je primárně jednoduchá, nedaří se mi ale úplně dobře chování
> toho snímače arduinem simulovat.
>
>
> Zdravi
> Jirka Sloupenský OK1MWW
>
>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Neobsahuje žádné viry.www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>
> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>
> po 29. 1. 2024 v 16:04 odesílatel Jindrich Fucik <FULDA na seznam.cz
> <mailto:FULDA na seznam.cz>> napsal:
>
> Hele, čtu to dobře, že to je SPI nebo synchroní sériák?
> Co tě nutí to dělat bit bankingem? Proč nepoužiješ SPI devic přímo v
> hardware procesoru?
>
> ---------- Původní e-mail ----------
> Od: Jirka Mww <jirka.mww na gmail.com <mailto:jirka.mww na gmail.com>>
> Komu: HW-news <hw-list na list.hw.cz <mailto:hw-list na list.hw.cz>>
> Datum: 29. 1. 2024 14:08:29
> Předmět: Re: Zase Arduino - jak dostat data do přerušení
>
> Dobrý den,
>
> tak jsem se k tomu zase dostal, dole je zdrojovy kod té
> přerušovací rutiny. K tomu jen pár vysvětlení :
> Celé to má sloužit k imitaci snímače absolutního úhlu , je to
> spouštěné sestupnou hranou CS ( žlutá) , CLKEXT ( fialová) ,
> jsou hodiny generované nadřízeným systémem, DOEXT je výstup s
> daty, měla by se přenést proměnná TEST1.
> V hlavní smyčce programu je aktuálně jen delay (100), jinak se
> tam nic nedělá
> Proměnná TEST1 se v přerušovací rutině opakovaně plní 0xAAA,
> takže riziko, že ji nějak přepíše něco v hlavní smyčce je snad
> nulové
> Když ten řádek, kde se zapisuje , tj.
> digitalWrite(DOEXT,bitRead(TEST1,R)); nahradím tím, co je v
> komentáři ( XREF= !XREF atd...), tj. jen reverzací proměnné XREF
> tak to dává data dle obrázku v příloze - žlutá je CS, od toho je
> to přerušení, fialová jsou hodiny - oboje generované nadřízeným
> systémem
> Modrá jsou data - tak nějak bych si to představoval , že by to
> mělo vypadat
> Na všech třech drátech mám osciloskop - viz přiložený obrázek
> Když to pustím po resetu s tím
> digitalWrite(DOEXT,bitRead(TEST1,R)); tak mi na osciloskopu
> nějaká data jednou probliknou, ani nejsou celá, a pak ten výstup
> DOEXT ( modrý ) zůstane trvale v nule.
>
>
>
> /* RUTINA PRo VYSTUP DAT */
> void DataOut() {
> // cli(); // disable global interrupts
> volatile byte K; // pocitadlo pro hodiny
> volatile byte R; // pocitadlo pro vystup bitu
> volatile unsigned int TEST1 = 0xAAA; // jen pro test
> volatile byte XREF = 0; // pro vysledek
> K= 10;
> R= 10;
> XREF = 0;
> do { digitalRead(CLKEXT);} while (digitalRead(CLKEXT) ==
> HIGH);// ceka na sest. hranu hodin
> delayMicroseconds(30);
> do {
> do {digitalRead(CLKEXT);} while (digitalRead(CLKEXT) == LOW);//
> ceka na vzestupnou hranu, aby zapsal data
> delayMicroseconds(3);
> digitalWrite (DOEXT,bitRead(TEST1,R)); // tady je problem
> // XREF = !XREF; // tohle dává obrázek na osciloskopu v příloze
> // if ( XREF > 0) {digitalWrite (DOEXT,0);} else {
> digitalWrite (DOEXT,1);}
> delayMicroseconds(30);
> K= K-1;
> R = R-1;
> do {digitalRead(CLKEXT);} while (digitalRead(CLKEXT) ==
> HIGH); // ceka na sestupnou hranu kdy Master cte data
> delayMicroseconds(30);
> } while (K>= 0);
> do {digitalRead(CLKEXT);} while (digitalRead(CLKEXT) == LOW); //
> konecny prechod do jednicky
> sei();// enable interrupts
> }// konec preruseni
>
> Zdravi
> Jirka Sloupenský OK1MWW
>
>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Neobsahuje žádné viry.www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
>
> <#m_4710967943847360956_-wm-DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>
> ne 28. 1. 2024 v 20:49 odesílatel Jaroslav Buchta
> <jaroslav.buchta na hascomp.cz <mailto:jaroslav.buchta na hascomp.cz>>
> napsal:
>
> __
> nebo sem poslat cast zdrojaku...
> Dne 28.01.2024 v 20:09 Jirka Mww napsal(a):
>
> Tím to bohužel nebude, v současném stavu tam v hlavní
> smyčce dávám konstantu a ani ta se celá neposle.Bude to
> nějaká blbost, asi to chce pauzu...
>
> Dne ne 28. 1. 2024 19:03 uživatel Jaroslav Buchta
> <jaroslav.buchta na hascomp.cz
> <mailto:jaroslav.buchta na hascomp.cz>> napsal:
>
> Data jsou sdilena v jednom pametovem prostoru, v tom
> by problem byt nemel. Tipnul bych, ze bude nejaky
> problem v synchronizaci hlavni smycky a data se
> prepisou znova driv, nez se odeslou?
> Dne 28.01.2024 v 19:00 Jirka Mww napsal(a):
>
> Dobrý večer,
>
> zase se tady trápím s Arduinem. Potřebuji v
> přerušení od pinu 2 u Arduino Nano poslat ven
> dvanáct bitů. Přerušení vyvolá vstup CS od
> nadřízeného stroje, pak jdou hodiny asi po 200
> uS a na jejich sestupnou hranu potřebuji posílat
> ven data. V podstatě mi to funguje, pokud ta
> data, co potřebuji poslat, vytvořím až v té
> přerušovací proceduře. Nevím ale, jak tam
> dostat data, která vyrobím v hlavní smyčce.
> Deklaraci té proměnné , co chci poslat, mám jako
> volatile unsigned integer , zkoušel jsem i
> volatile byte, deklaraci mám v hlavním programu
> ,zkoušel jsem to deklarovat i v té přerušovací
> proceduře, ale nejsem úspěšný. Ta data se
> pošlou jen jednou, a ještě ne celá. Pak to
> vypadá, že se ta data nějak smažou, nebo co.
> Posílá to už jen nuly. Bohužel, ladící výpis tam
> nejde udělat. Můžete mne prosím zase nějak
> nakopnout ?
>
> Zdravi
> Jirka Sloupenský OK1MWW
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz <http://www.hw.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> <http://www.hw.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz <http://www.hw.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> <http://www.hw.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list