Tulipa tuossa mielenkiintoinen ongelma vastaan, kun leikin vanhalla UART:lla ja 15.1MHz kellolla. Em UART on konfiguroitavissa yläpäässä maksimissaan 1:1 kelloille, ts. em. kello on se "16x" samplaus kello, jonka avulla se varsinainen datavirran nopeus aikeaa. Yläpäässä kertoimet on suoraan kellopulssien laskua, ts. ne eivät ole 50/50 pulsseja vaan esim. 33/67. Mitä tästä sitten seuraa? Jos haluaa kytkeä Tuon signaalin avr:ään, saa olla tarkkana, koska bittikellolle tehdään avr-kellon mukainen latchaus. Ohjekirja sanoo, että UART:n kellotaajuus pitää olla korkeintaan 1/4 piirin kellosta. Nyt ylikellottamalla AVR:n 24MHz äkkisältään näyttäisi, että voi kytkeä suoraan, koska 24/4=6MHz, kun valitsee UART:n jakajaksi 1/3, jolloin sarjakello on n. 5.05MHz. Vaan eipä olekaan! Em. kellopulssi on hyötysuhteeltaan vain 33%, jolloin sen ylhäällä oloaika on lyhyempi, kuin mitä tuo 5.05MHz antaa, ja avr ei itse asiassa näe pulssia ollenkaan. Että silleen..
314kbps UART:lla 16c450:sta avr:ään
18or3
2<50
0Äänestä
Muut lukivat myös
Ketjusta on poistettu 1 sääntöjenvastainen viesti.
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 2
Vanhimmat
Tein pulssisuhteen korjaimen 74LS05:stä ja RC-aikavakiopiiristä. Nyt se jo vähän räpsyy, mutta pulssin muoto on vielä aika huono ja korjattu ylhäälläolo aika 45%, mikä on vielä hiukan siinä rajalla, kun signaalikin on vielä aika kolmiomainen.
Olisi tietysti voinut ottaa 16c450:stä tuon baud-nastan irti ja vastaanotto-baudinastaan avr:ltä suoraan sen kellon, mutta kun joutus sitten muuttamaan kytkentää.
Vielä toinenkin ongelma tähän mahtuu: Tuo 314kbps on siis 15.1MHz/3/16. Nyt kuitenkin AVR:llä sarjaportille saa asynkronisena kertoimen 16x 24MHz kellolla. Kellon skaalauskertoimeksi tulisi siis 4.8. Eli asynkroninen liikene ei onnistu, itse asiassa ensimmäinen onnistuva kombinaatio olisi n. 70kbit:n kohdalla, eli virhemarginaalit tarpeeksi pienet molemmissa päissä.
Seuraava vaihtoehto on käyttä U2X bitti-moodia, eli kertoimen jakajana onkin 8x. Ei auta sekään. Siispä pitää valita UMSEL=1, eli synkroninen moodi! Nyt sitten se AVR:llä tarkoittaa, että kello on 2x. ja UART:lla kello on 16x. Siispä mukaan pitää vielä laittaa jako 8:lle, eli UART:lta kellot counter-piirille ja sieltä AVR:lle. Tämän jälkeen sen saa toimimaan.