Nog heel veel meer ontwerptips en domme fouten

maartenbakker

Special Member

Allee, u noemt Lambiek en ge spreekt geen woord buiten Nederland?
"The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose." - Disclaimer: ik post soms vanaf een tablet, het is geen doen om alle autocrrect, ontbrekende spaties en off-by-ones er uit te halen.
vandaag weer een kemel van jewelste afgeschoten.
http://fcapri.homelinux.com/off/pics/arduinopower.jpg

maak ik vandaag men prototype om 2 voedingen + de backup accu te monitoren via een arduino, die alles zal doorcommuniceren naar de rpi server.
heel de ochtend krijg ik mijn sampling maar niet juist.
de ene meting zegt die dat de accu 2.6V heeft, erna 4.2V, dan weer 3.3V,... schommeld heen weer.

vertragingen bij gestoken, meerdere samples, code geschreven voor de uitschieters eruit te filteren, interne, externe en default regerantiespanningen gebruikt, ...
andere arduino erin en de code erin gepompt van mijn car dashboard project, andere code erin van mijn li-ion BMS programma
... alles schommeld op en neer.

en dan zag ik het.... alle massa's van de meet batterijen hangen aan elkaar (kan niet anders als ik met een arduino meet), maar had de massa van die inputs wel niet aan de massa van de arduino gehangen...
draadje erbij, alles zuiver
ik hou van werken ..., ik kan er uren naar kijken
High met Henk

Golden Member

Dat hoeft ook niet....
Als je een differentiaal adc hebt
to all newbies: RTFM/D of google eens (p.s. RTFM/D = Read the f*cking manual/datasheet).
Lambiek

Golden Member

Op 12 februari 2016 15:06:15 schreef maartenbakker:
Allee, u noemt Lambiek en ge spreekt geen woord buiten Nederland?

Allee zulle, het is een straalkacheltje. :)
Als je haar maar goed zit, GROETEN LAMBIEK.
maartenbakker

Special Member

Op 30 januari 2016 00:57:57 schreef vincent1971:
https://www.youtube.com/channel/UCJ0-OtVpF0wOKEqT2Z1HEtA

Volgens mij spant deze man absoluut de kroon.
Electroboom weer helemaal vergeten, heb de laatste maand het meest naar Big Clive en Louis Rossman gekeken en naar Dan Savage geluisterd (aflopend gerangschikt op electronica-inhoud en op noodzaak om tegelijk ook te kijken wat ze doen). Alle drie alsnog prettiger en vaak kundiger vertellers dan Dave Jones.
"The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose." - Disclaimer: ik post soms vanaf een tablet, het is geen doen om alle autocrrect, ontbrekende spaties en off-by-ones er uit te halen.
Ik had laatst een leuke op een stm32..

c code:
 
uint8_t aubyArray[10];
*((uint16_t*)&(aubyArray[5])) = 0;
 

Duurde even voordat ik doorhad waarom mijn processor in een hardfault dook...
Ik zie het niet direct, eigenlijk; je schrijft, waarschijnlijk onbedoeld, elementen 5 en 6 (adres van element 5, cast naar uint16 pointer, schrijfactie), en dat valt nog binnen de bounds van de array. Als je hetzelfde probeert met element 9 gaat het natuurlijk wel mis.
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
High met Henk

Golden Member

en het duurde dan even voor ik sparky begreep met plaats 9.....
het was al laat zullen we maar zeggen...
to all newbies: RTFM/D of google eens (p.s. RTFM/D = Read the f*cking manual/datasheet).
Op 21 juni 2016 22:24:11 schreef SparkyGSX:
Als je hetzelfde probeert met element 9 gaat het natuurlijk wel mis.
Dan overschijf je een byte van een andere variabele. Maar of dat meteen mis gaat weet ik niet. Of eigenlijk dat weet ik wel. Dat gaat natuurlijk NIET meteen mis.

Ah. Ik had in m'n andere browser al iets zitten tikken over unaligned access....

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc....FAIGG.html
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Ah, dat mag blijkbaar niet, daar had ik nog niet aan gedacht. Ik snapte ook al niet hoe dat tot een hardfault zou leiden, tenzij je bij toeval ook over het einde van een RAM blok zou gaan.
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Omdat een stack meestal naar beneden groeit in moderne stack implementaties, zet je vaak je stack aan de bovenkant van het RAM en de variabelen aan de onderkant. Eigenlijk is er natuurlijk niets op tegen om je variabelen tegen de bovenkant van het RAM aan te duwen en daaronder aansluitend de stack. Heb je een stack-overflow, krijg je een fault als de CPU onder begin-ram een access doet. Fijner dan "soms" een variabele overschrijven doordat je callstack soms diep is of er soms een interrupt plaatsvindt. Dus inderdaad, je kan eigenlijk nooit bij zo'n 1 byte overrun voorbij het eind van het geheugen gaan.
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
De grap is dat het een 32-bits microcontroller is met dus 32-bits registers. Index 5 ( net als de rest van de oneven indexen) is dus niet uitgelijnd en in dat geval moet de processor beide bytes apart benaderen... In dit geval was de compiler niet op de hoogte van mogelijke niet uitgelijnde data en ging het dus fout.

De oplossing was het gebruiken van een packed pointer, of een packed struct eroverheen leggen. Helaas kun je de data dan niet meer meegeven aan een andere functie.

Edit: Normaal gebruikt de compiler trouwens padding om al het geheugen per 4 bytes uit te lijnen (als je 3 8-bits waarden hebt, plaatst de compiler er een 4e achter). Dit kun je voorkomen met packed structs

[Bericht gewijzigd door r3dnax op 23 juni 2016 08:26:12 (18%)]

de crux is dat de processor geen support voor unaligned access heeft.

Dan kan je compiler daaromheen werken. Of je OS kan een "unaligned access" handler hebben.

Als je met een struct moet werken waarbij 16 bit halve-woorden op oneven adressen staan, dan zou ik:
aubyArray[5] = aubyArray[6] = 0;
schrijven voor de code die je postte. En om de waarde er weer uit te halen:
myvar = (aubyArray[5] << 8) | aubyArray[6];
De lol is dan ook dat je niet afhankelijk bent van de byte-volgorde van je processor.

Als je dit meer dan 1x nodig hebt, schrijf je:
#define GET_SHORT(x) (((x)[0] << 8) | (x)[1])
en dan krijg je:
myvar = GET_SHORT (aubyArray+5);
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Evarist

Golden Member

Op 21 juni 2016 17:18:59 schreef Lambiek:
[...]
Allee zulle, het is een straalkacheltje. :)
Goed!!!
En ken je ook een wasmachien, een afwamachien, en een droogkast?
En ken je de functies procureur en schepene?
Nihil est verum, quod non probatur primo.
Lambiek

Golden Member

Als je haar maar goed zit, GROETEN LAMBIEK.
fred101

Golden Member

Ik moest een 2 ohm en 20mohm variabele weerstand hebben om een Milliohm meter te controleren en te justeren. Aangezien dat kreng met 2A leek wilde ik daarvoor niet een van mijn standaards gebruiken.

Geen probleem, even in de bak "lomp weerstands spul" gedoken en daar zat een ding in wat bestond uit een klosje met twee soldeerlippen en montage beugel met de opdruk 1 ohm. Dus ik haal de draad eraf en monteer hem tussen twee studs zodat verschuiven van de kelvin klemmen de waarde verandert.

Alles goed en wel, de clips op 20 mohm gezet met behulp van een 7,5 digit meter maar de Milliohm meter week mega af en bleef veranderen maar ik kon geen fout meer vinden. Alle componenten waren goed en binnen de specs. Ik pak er een tweede 7,5 digit meter bij. Die week af van de eerste, idem de andere twee 6,5 digit meters die ik daarna probeerde maar geen van alle veel terwijl een short wel gelijk..

Kom ik er uiteindelijk achter wat het probleem is. Dat klosje draad was een PTC :-(
www.pa4tim.nl, Reparatie van meet- en calibratie apparatuur, ook oud en exotisch
Paar mooie nieuwe printjes gemaakt:
http://prive.bitwizard.nl/dsc06664_small_small.jpg....

Bij nadere inspectie...
http://prive.bitwizard.nl/dsc06665_small_small.jpg
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Jochem

Golden Member

Buiten de deur laten bestukken of zelf de bril niet opgehad???
Opto zit ook scheef. Is voor de werking niet erg, maar kan ik niet tegen ;)
Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.
High met Henk

Golden Member

Hij zit niet netjes, maar zou wel moeten werken.

Ik ruik 2 opties.

.1 pick en place machine beetje de weg kwijt
.2 stagiair die niet echt kon/kritisch was
to all newbies: RTFM/D of google eens (p.s. RTFM/D = Read the f*cking manual/datasheet).
Jochem

Golden Member

Het echte probleem is die tor die op z'n kop zit natuurlijk he..
Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.
Thevel

Golden Member

Haha, goed gezien!
Pootjes omhoog, net een dood insect :)
Jochem

Golden Member

Zoiets kan eigenlijk niet als je het met de hand gedaan zou hebben, ook niet als je alleen plaatst met de hand en daarna reflow doet (immers, je zet hem toch met z'n pootjes in de pasta hetgeen op deze manier niet lukt; dat moet toch opvallen).

Maar als het door een machinale pick-and-place gedaan is (tor ondersteboven in de tape dan neem ik aan, hoewel dat ook niet iets is dat je dagelijks ziet), dan snap ik die scheve componenten vervolgens niet. Niet alleen die opto hoor, alle andere componenten zitten ook schever dan dat je in een machinaal proces zou verwachten (zowel qua draaiing als offset).

Dus gezien die tegenstrijdigheid ben ik erg benieuwd naar het assemblageproces.
Heb geduld: alle dingen zijn moeilijk voordat ze gemakkelijk worden.
Een prachtige schakeling gefabriekt met ttl...
Foutje, stond op 12 volt.... |:(
u=ir betekent niet :U bent ingenieur..
Thevel

Golden Member

En daar kunnen die dingen slecht tegen...
Veel IC's stuk?
componenten die er op de kop op liggen kom ik helaas vaak tegen.
Geen stagiair, meer een pick & place en vooral de eind controle die niet altijd even goed werkt.
RTFM, dan pas vragen...