( apal | 2021. 03. 06., szo – 11:44 )

Ahogy a tobbiek is irjak:

 - 3.3V-rol huzd fel azt az ellenallast: alapszabaly hogyha egy adott IC tapfeszultsege annyi amennyi, akkor az I/O labai is maxmium annyit birnak. Ha ennel tobbet (pl 3V3-as tappal birja az 5V-ot) akkor azt nagyon-nagyon hangsulyosan, mar az adatlap legtetejen irjak hogy vannak ilyen labai, melyik labak azok es hogy miert. Pelda: sok mikrokontroller tud CAN interface-t kezelni, viszont a CAN fizikai illesztok by def 5V-osak. Igy a mikrokontroller azon labai ahova a CAN RX/TX-et illeszted (leginkabb az RX-et), azok sok esetben 5V-toleransak. De altalaban nem azok, nem szabad ebbol kiindulni.

 - az 500k nagyon sok. Alapszabaly lehet itt is hogy 1mA-t folyass at legalabb, azaz 3.3k-s ellenallassal huzd le. 

 - Ha tudsz, hasznalj Schmidt triggeres bemenetet vagy szurot vagy ilyesmit. Utolag is betehetsz ilyet, vannak pl 6 csatornas schmidt-triggerek a klasszikus 74xx-es sorozatban is. Pl a 7414-es. Ez ugyan meg is forditja a logikai szintet, de nem problema ha a kontrollerben kezeled a foritott logikai szintet. Egyszeru, olcso, ezer eves technologia, sot, meg akar az 5V->3V3 illesztest is megoldhatod vele! 

 - A szoftveres szures is sokat segit. Peldaul csinalhatsz olyat hogy folyamatosan olvasod es shifteled a bemenetet egy (pl.) 8 bites regiszterbe:

uint8_t curr,prev;
...
while ( 1 )
 {  curr = (prev<<1) | (INPUT?1:0);
    if ( curr==0xFF && prev != curr )
     {   do_something_if_button_is_pressed();
         ...
     }
    else if ( curr==0x00 && prev != curr )
     {   do_something_if_button_is_released();
         ...
     }
    prev=curr;
    ...
 }

Ez ilyen kicsit "szegeny ember schmidt-triggere" jellegu megoldas, de utolagos, tisztan szoftveres javitasra egesz jo lehet. Hasznaltam mar ilyet, volt hogy ez mentette meg a dolgokat. Az INPUT mintavetelezesenek idoskalajaval tudsz jatszani, ha fizikai bemenetet erzekelsz akkor nem kell tul gyakran (pl masodpercenkent 1000x eleg).