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
![]()
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 ![]() 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 |