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).