Fórum témák
» Több friss téma |
WinAVR / GCC alapszabályok: 1. Ha ISR-ben használsz globális változót, az legyen "volatile" 2. Soha ne érjen véget a main() függvény 3. UART/USART hibák 99,9% a rossz órajel miatt van 4. Kerüld el a -O0 optimalizációs beállítást minden áron 5. Ha nem jó a _delay időzítése, akkor túllépted a 65ms-et, vagy rossz az optimalizációs beállítás 6. Ha a PORTC-n nem működik valami, kapcsold ki a JTAG-et Bővebben: AVR-libc FAQ
Sziasztok!
Köszönöm a kimerítő válaszokat! Az strstr módszerrel semmi gond nincs, a programom másik részén működik, itt az atoi 0-val tér vissza, az rxbuffal van gond mert ha előtte manuálisan belerakom a csq: 19-et akkor megy. Nem q betűt, :ot hanem azt kell keresni hogy csq, mert más at parancsok is lesznek benne. Tehát a kérdésem az hogy ott amit bemásoltam miért nem megy. Azért nem /nre várok mert nem küld, cr lfet küld minden csomag végén, de az időtúllépéses jól működik. Az a baj ha cr lfre várok hogy nem tudom hány csomag jön vissza.
Szia!
Az strstr modszerrel gond lesz, ha nincs a bufferben a keresett string, az biztos. Ilyen esetben inkabb strncmp()-t hasznalnek. Nem ertem, hogy mi a gondod, mert elozoleg azt irtad, hogy a bufferben benne van a kivant szoveg. Most meg azt mondod, hogy ha beleteszed a szoveget, akkor mukodik. Akkor most benne van, vagy nincs? Az strstr meg az itoa ugy kellene mukodjon. Az RxBuffer hogyan van deklarava? A '\r' a CR (0x0d), a '\n' meg az LF (0x0a). Tehat kuld a modem '\n'-t. Persze az idofigyeles is kell, de amikor mar az lejar, akkor az azt kellene jelentse, hogy elveszett a valasz. Meg illene figyelni az erkezett byte-ok szamat is, mert amig jon karakter, te csak rakod a pufferbe.
Dióda 1206-ban? Még nem láttam olyat, pedig naponta többszáz fajta alkatrésszel találkozom,
mivel SMD-beültető gépeket programozok. Szerintem SOD80 (hengeres) vagy SOD123 (lábas), esetleg MELF lesz. Az 1N4148 létezik SOD80 és SOD123 tokozásban is, ezek ráférnek a 1206-ra. A MELF diódák (pl. 1N4002) számára nagyobb fólia kell, én is szívtam vele mikor 1406-ra terveztem... A hozzászólás módosítva: Júl 6, 2014
ööö...hengeres, és pont illik a 1206-os pad-ra. Ezt elírtam
Szerk.: most nézem, hogy amúgy létezik Katt! A hozzászólás módosítva: Júl 6, 2014
Sőt, letezik 0805-ben is 1N4148.
A hozzászólás módosítva: Júl 6, 2014
Bolondokat beszeltem, helyesbitek. Az strstr() is NULL-t ad vissza, ha nem talalja a substringet.
Pici, nem mondom. De legalabb nem gurul el, mint a hengeres.
Végülis, ahol veszem, 1ft-al drágább a lapos. Lehet, ennyit megér a sok mérgelődés, mert az a kis piszok tényleg mindig megtalálja, hogy merre nem vízszintes az asztalom
Nem igazán értem ezt az analog comparator dolgot az atmega328p adatlapjában. Van olyan lehetőség, hogy az ADC folyamatosan mér (de nem állandóan a programban kérdezem le az értékét, hanem megy magától, mint a timer), és ha az érték meghalad egy bizonyos, előre beállított értéket, akkor generál egy megszakítást? Mintakódot is elfogadok (ha lehet akkor az ADC0 beolvasásával együtt, mert még sosem csináltam ilyet).
Más: az AREF nekem egy 100nF-es kondival GND-re volt kötve, az AVCC pedig 5V-ra. Elvileg ha analóg bemenetet is használunk, akkor ezeken valamit módosítani kell. De pontosan mi is?
Ok, ma én is tanultam valami újat. A hengeres szerintem SOD80 lesz.
Ezért dolgozok már évek ota egy gumi lábtörlön, amiben kis mélyedések vannak és erröl nem gurul messze semmi. (Autok hátso gumiszönyege még vékonyabb )
Köszönöm szépen az építő jellegű kritikákat! Hasznosnak találom, mivel saját magam szórakoztatására tanultam meg programozni, tehát saját magamtól senki sem tanított, így jól jönnek a javaslatok.
Tehát az az érdekes, hogy úgy tűnik mintha az strstr nem tudná feldolgozni az RxBuff változó értékét, ugyanis leteszteltem, hogy az RxBuff-t kiírattam LCD-re és benne volt az érték megfelelően, de az strstr nem dolgozta fel. Amikor az strstr előtt beleírtam az RxBuff-ba (így: RxBuff[0]='C'; RxBuff[1]='S'; stb...) akkor működött. Így deklaráltam: char RxBuffer[150]=""; Az UART ISR-ben jó ötlet figyelni hogy ne írja bele folyamatosan a vett adatokat, hanem csak addig amennyi karakter van deklarálva az RxBuffer tömbben. (Bár nem kaphat annyi sokat a modemtől, de ártani nem árt, használni meg valamikor használhat... ) A modem kommunikáción sokat gondolkoztam, mondok egy példát bekapcsoláskor ezeket küldi el:
Tehát itt pl a PSNWID-től a DST-ig egy csomagként kezeli jelenleg, van hogy a PSNWID-t a Call Ready előtt küldi el. Próbáltam csomagonként is feldolgozni, de kicsit bizonytalan volt a működése, mivel 0-24 órában működni fog ezért próbálom a lehető legstabilabbra megcsinálni. Igen, az strstr NULL-t ad vissza ha nem szerepel, ezt pl a Call Ready vizsgálatakor is figyelem, amiket fentebb leírtam ha nem NULL-al egyenlő az strstr értéke akkor a GSMReady változót szépen egyesével növeli, és ez alapján ad hibaüzenetet is (pl nincs SIM, SIM PIN be) hogy mennyi a GSMReady értéke.
Lenne egy SPI-s kérdésem. A kommunikáció olyan, hogy a mester 1 byte-ot küld (vezérlés), 1 byte-ot fogad (érzékelő).
A kérdés, hogy az érzékelő adatait hogyan lehet megbízhatóan átküldeni a mester felé. A specifikáció szerint átvitel közben az SPDR-t nem lehet írni. Mikor kell a slave-nek az SPDR-t beállítani? - megvan az eredmény, beírja a slave az SPDR-be (de mi van, ha éppen átvitel van és felülvágom rossz adattal?) - elküldök egy bájtot, hogy az érzékelő adata kell, elküldöm a következőt, amiben kiolvasom (interrupt is van, fogalmam sincs, hogy a slave feldolgozza-e amit elküldtem) Hogyan szokták megoldani? A hozzászólás módosítva: Júl 8, 2014
Sziasztok napokban vásároltam az avr-tavir shopjábol egy arduino unot hozzá ezt a fedpanelt Bővebben: Link és egy 20X4 es LCD modult hozzá egy i2c ilesztöt Bővebben: Link a fedpanelen van i2c kivezetés elöször arra kötötem de semmi majd utána olvasva rájötem hogy az analog 4 és 5 re kell kötni ezt is megtettem de semmi nem jelenik meg az LCD-n vajon mit rontotam el esetleg valakinek valami ötlet minta program az ilesztö ic-je pcf8574t adress-t lekérdeztem 0x27 segitségeteket elöre is köszönöm .
Üdv!
Van egy hc-sr04 ultrahangos távolságmérőm, amit Fizikus írása alapján input capture-el rákötöttem az atmega8-ra. Így magában szépen küldi soros porton a meglepően pontos adatokat. Hogy forgatni tudjam, rászereltem egy szervóra, amit a timer2 pwm vezérel. A szervó rendesen mozog, de a távolságmérő csak nullákat küld addig, amíg egy mérés idejére össze nem zárom az echo és a gnd lábait. Ezután már jó adatokat kapok.
A segítséget előre is köszönöm! Iván
A protokólt pedig ki kel találni!
Pl.: Ha nem használsz a Byteban minden Bitet a vezérlésre? Akkor 1 kijelölt bitet invertál a Slave, és úgy küldi vissza a kapott adatot. Ebből már megtudod, hogy az előző parancsot pontosan megkapta és végrehajtotta a címzett. Vagy mindkét oldalon szinkronban fútt 1 – 1 számláló, és a slave ezt az értéket küldi vissza. Ebből látod, ha lemaradt 1 utasítás végrehajtása. ...
Az fenn van a Shop letölthető mintái közt:
Bővebben: Link Mellékeltem, és a bekötést is. A hozzászólás módosítva: Júl 8, 2014
TavIR AVR köszönöm a segitséged letöltötem a mintákat fel is töltötem az unora a helloworld_i2c minta programot mindenféle krix krax már megjelent de nem a program adott részében irt hallo arduino szöveg, és háttér világitást mért nem kapcsolja be? Vagy a háttér világitást nem az i2c ilesztö vezérli?
Felteszed a libraries alá.
Utána Arduino elindít. File->Minták->Liquidcrystal->TavIR_I2C Az általad hivatkozott programban a
sort cseréld ki
sorra. A külön háttérvezérlés a távolkeleti paneleken van. Itt ugyanúgy a PCF8574 bővítőchip vezérli és a lcd.backlight(); és az lcd.nobacklight(); sorokkal lehet ki/bekapcsolni. A hozzászólás módosítva: Júl 8, 2014
Két nap szivás után végre müködik hála neked nagyon szépen köszönöm a segitséged további szép estét.
Köszi, a megoldás az interruptok körül lesz.
- az interruptnak adott időn belül ki kell lépnie (mondjuk 100 ciklus) - egy PCINT-et felrakok az SS lábra - Amikor az SS lábat alacsonyra állítom, a slave berakja a kívánt választ - várok 200 ciklust, hogy biztosan végrehajtódjon - elküldöm a parancsot és beolvasom a választ - SS-t visszaállítom
Egészen jó, (tanítani kellene az ötletedet)!
Kicsit keresel a Googlen: HU gcc string függvények
C string műveletek (string.h alkalmazása) 5. strchr – strrchr : karakter keresés stringben Vagy: 8. strset – strnset : karakterek beállítása megadott karakterre Mire válaszoltam törölték a hozzászólást! A hozzászólás módosítva: Júl 10, 2014
Nem akar müködni a szorzom:
Az mh és az ml regiszterekben még stimmel, de amikor átirom az y-be (stw y,m) már nem tudom helyesen visszaolvasni. Az eredmény egy 3 bytes word. Kösz minden segitséget.
Esetleg a macro-t nem kéne megadni (stw),ha már rákérdezel a működésére ?
A dseg-ben hogy csináltad a byte foglalást,az Y mire mutat ?
A RESULT mint változo definiálva van mint .byte 3.
Valahol hiányzik a RESULT meg az Y regiszterek viszonya. Azt hiszem átirom egyszerübb formába. A macro jo, azt már használtam korábban is:
A célom az lenne, hogy utánna a resultot betöltve egy regiszterbe tovább tudjam használni:
itt az ldiw macro (az is gyakran lett már használva a kodban) kösz A hozzászólás módosítva: Júl 14, 2014
Ez lenne a viszonya.
Itt keveredik el mindig az eredmény. Az mh, ml - ben még jo, de amikor az SRAM-ba elrakom oda már rossz számok kerülnek, igy az ldiw ami ugyanaz, mint a te 2 sorod, a rossz eredmény jelenik meg az Y regiszterekben, de az az érzésem hogy itt valamit rosszul írok vagy értelmezek.
Kösz megyek még rágodni, csak most nem tudom futtatni, mert nincs itt a HW. |
Bejelentkezés
Hirdetés |