MGP
LDmicro user.
Jullie incl. SparkyGSX zijn geen geschikte raadgevers om startups te begeleiden. 
edit: @Arco hieronder, we zijn aan politiek aan het doen en elke politieke partij denkt dat ze gelijk heeft 
Dat de TS maar zijn conclusies trekt uit dit topic (anderen ook..).
[Bericht gewijzigd door MGP op (52%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Da's onzin. De bedoeling is om een zo goed en simpel mogelijk resultaat te krijgen, en dat is nou eenmaal met interrupts.
Dat interrupts 'eng en moeilijk' zijn is ook onzin.
Kwestie van een paar regels code en de datasheet eens goed doorlezen. (wat eigenlijk al voordat met programmeren begonnen wordt gebeurd had moeten zijn...
)
@MGP: heeft niets met politiek te maken (dat zijn denkbeelden die iedereen anders kan uitleggen; hier kun je gewoon aantonen wat beter is...)
[Bericht gewijzigd door Arco op (18%)]
blackdog
Golden Member
Daar de mens het noodzakelijke niet kan volbrengen, streeft hij naar het overbodige (Goethe)
Hi,
Ik moest vanochtend lachen i.v.m. de stortvloed van reacties op dit topic 
En ook iedere keer ben ik weer verbaasd, over de grote hoeveelheid aananame's die er worden gedaan...
Zoals dat ik niet wil weten dat interrupts erg vaak noodzakelijk zijn voor goed lopende software.
Of dat de code van MOET worden uitgevoerd met een array...
Wat de Array betreft, daar ben ik mee begonnen over te denken met mijn beginners ervaring...
LetterHenk en Dr blan hebben mij al snel van deze gedachten af geholpen.
Ik had toch aangegeven dat ik het met een Arduino Nano en DS18B20 wilde uitvoeren.
Zover ik weet, hebben die geen vierde aansluiting in de TO92 behuizing waardoor er een hardware interrupt gebruikt kan worden.
Ook een aantal andere sensoren hebben deze aansluiting niet, die ik reeds in mijn voorraad heb.
Featbeard,
Ik ben uiteindelijk met analoge sensoren begonnen maar liep tegen wat problemen aan wat schaling betreft, referentie spanning enz.
Wat betreft het uitlezen van de DS18B20 sensoren zoals jij beschrijft, ik denk niet dat ik de code hiervoor snel genoeg in mijn vingers krijg.
En wie komt met een oplossing voor de DS18B20, natuurlijk Roland 
Ga ik als het meezit vandaag nog even testen, als dit goed gaat voor meerdere projectjes goed bruikbaar voor mij.
Wat betreft het koppelen van meerdere Arduino's, daar ben ik na wat lezen op het Internet al vanaf gestapt.
Wat betreft het gebruik van twee Arduino's echter niet, ik had al aangegeven dat dit topic nog een handige functie heeft getriggert bij mij.
Dat betreft ook het begrensen van het gedissipeerde vermogen in de power transistoren.
Denk dan aan de dissipatie begrenser in mijn LAB voeding door een extra Fet voor de buffer elco en dit samen met de Thyristor.
Maar een ding tegelijk, eerst de "State Machine" functie testen en wat code schrijven dat de manier die LetterHenk voorstelde bevat.
Dank weer voor alle zinnige input!
Groet,
Bram
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Een state machine is in werking enigszins te vergelijken met interrupts... (maar meestal lastiger in onderhoud)
Zover ik weet, hebben die geen vierde aansluiting in de TO92 behuizing waardoor er een hardware interrupt gebruikt kan worden.
Een DS1820 heeft geen interrupt (nodig). Bedoeling is om de DS1820's in bijv. een timerinterrupt iedere 100mS uit te lezen...
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Op 15 mei 2017 17:15:04 schreef blackdog:
Zover ik weet, hebben die geen vierde aansluiting in de TO92 behuizing waardoor er een hardware interrupt gebruikt kan worden.
Ook een aantal andere sensoren hebben deze aansluiting niet, die ik reeds in mijn voorraad heb.
En dan nog beweren dat je het allemaal wel weet...
Gelukkig is de techniek na jouw XTje nog wel verder gegaan; je kunt interrupts krijgen van timers, ADC conversion complete, RX buffer vol / TX buffer leeg van een SPI, UART, CANbus, Ethernet, USB, je kunt het zo gek niet bedenken. De moderne controllers (niet die oude 8-bitters van een Arduino nano) hebben zelfs DMA om data van een naar een periferal te pompen zonder tussenkomst van de processor.
Hier https://www.maximintegrated.com/en/app-notes/index.mvp/id/214 staat hoe je een UART kunt gebruiken als 1-wire interface.
Je zou natuurlijk ook een I2C sensor kunnen gebruiken, dat kost een draadje meer maar dan in de interface wel eenvoudiger.
fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Dat zou je inderdaad prima als state machine kunnen implementeren; het simpelste lijkt me om tot 16 te tellen, het laagste bit te gebruiken om te bepalen of je moet samplen of een temperatuur conversie moet starten of uitlezen.
Het hoeft niet ingewikkelder te zijn dan dit (aangezien het met 4 sensors en 16 stappen in totaal allemaal mooi uitkomt):
unsigned char MachineState = 0;
if( !( MachineState & 0x01 ) )
SampleVoltage(); // Voltage is sampled every second (even) cycle
else
{
if( MachineState < 8 )
StartTempMeasurement( MachineState >> 1 ); // during the first 4 odd cycles, start the temp measurements
else
ReadTempMeasurement( ( MachineState >> 1 ) & 0x03 ); // during the last 4 odd cycles, read measurement results
}
MachineState = ( MachineState + 1 ) & 0x0F; // increment state; wraps after 15
[Bericht gewijzigd door SparkyGSX op (13%)]
blackdog
Golden Member
Daar de mens het noodzakelijke niet kan volbrengen, streeft hij naar het overbodige (Goethe)
Hi
Ben nu aan het testen/spelen met de link van Roland, en dat schijnt te werken zoals de schrijver van het stukje bedoelde.
De uitleg van de schrijver kan ik begrijpen, zoals het in de code staat weergegeven nog niet helemaal, dat zal langzamerhand wel komen.
Ik moet nog een manier vinden om de sensoren goed uit elkaar te houden, een vraag hierover op het forum waar de code stond
is niet echt beantwoord, dit is het "non" antwoord van dcfusor:
This sensor isn't i2c, which is why no address. OneWire works a completely different way and does its own device sorting.
En ja DS18B20 hebben wel adressen...
Ja en hoe wordt er dan gesorteerd denk ik dan, maar eens kijken of ik hier iets over kan vinden.
Ik heb nu even niet de mogelijkheid om de 4 DS18B20 sensoren op verschillende temperaturen te houden om b.v. te kijken
of er geselcteerd wordt op het laatste stukje van het adres van de sensor.
Dus b.v. laagste adres waarde is de eerste sensor waarvan de temperatuur het eerst verschijnt.
Voor anderen die de code ook willen gebruiken.
Het was mij in het begin niet duidelijk hoe het geheel werkte met deze "State Machien" code.
Je krijgt altijd data uit je verzoek, maar dat is altijd de laatste data die beschikbaaar is.
Zeg een cyclus duurt 1 Seconde en je vraagt na 0,8 Seconde de temperatuur op, dan krijg je dus de temperatuur meting van 0,8 Seconde geleden.
Je hoeft dan niet nog 0,2 seconde te wachten in de loop tot de data beschikbaar is.
Je loop kan gewoon verder draaien en het andere werk doen.
Mijn eerste aanname was dus dat je direct de data uit de sensor zou krijgen, wat bij nader inzien natuurlijk niet kan zover ik het OneWire systeem begrijp.
Mijn temperatuur metingen zijn dus in het geheel niet kritisch zoals Fatbeard ook al door had 
Zijsprong
Ik dacht dat dit b.v. handig zou zijn voor een simpel/goedkope oven controler, en dat gaat natuurlijk niet werken.
Met de State Machine blijf je gewoon de 0,8 Seconde conversie houden van een Sensor in de 12Bit state.
Misschien bij grote ovens omdat daarbij er ook een grote thermische massa aanwezig is en de 0,8 Seconde dan veel minder meespeeld in de looptijd.
Je krijgt niets voor niets 
Genoeg geweest voor vandaag, nu weer verder frutten met de code.
Groet,
Blackdog
fatbeard
Honourable Member
Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
De sensoren worden geïdentificeerd met het Match ROM (0x55h) commando, op een manier die volgens mij analoog is aan de anticollision-procedure van een ISO14443 RFID kaart...
Dáár kan ik desgewenst nog wel wat uitleg over geven, maar hoe zich dat precies verhoudt tot die Dallas-chipjes weet ik niet.
In de datasheet van de DS18B20 wordt op pagina 9 gerefereerd aan een andere application note, de Application Note 937: Book of iButton® Standards. Zonder die verder ingezien te hebben lijkt mij dat een uiterst lezenswaardig document, evenals de op pagina 17 genoemde Related Application Notes.
Jammer genoeg werken de links in de datasheet niet (dat kan aan mij liggen), maar het moet toch redelijk eenvoudig te vinden zijn.
rbeckers
Overleden
Gelukkig is de techniek na jouw XTje nog wel verder gegaan
Klopt, maar die XT met al zijn TTL IC's had ook een ISA bus.
Ik heb ooit een ISA kaart met wat I/O en een 13 bit ADC gemaakt.
(en een hoop TTL)
De principes zijn niet veranderd.
De rest wel.
blackdog
Golden Member
Daar de mens het noodzakelijke niet kan volbrengen, streeft hij naar het overbodige (Goethe)
Hi,
Deze week besloten het roer om te gooien omdat ik wat problemen zag met de State Machine software en het mij te veel tijd zou kosten dit uit te zoeken.
Dus ik ben weer terug met volledige analoge uitlezing van de sensoren.
Wat natuurlijk weer andere afwegingen overhoop gooide, zoals een verhoging van de referentie spanning noodzakelijk voor een groot genoeg meetbereik van de temperatuur sensoren.
Dit resulteerd dan ook weer in een lagere resolutie voor de spannings uitlezing vana de U en de I potmeter.
Maargoed, die zijn alleen voor de indruk waar deze potmeters op staan ingesteld 0,1V resolutie is hiervoor voldoende.
Hier staat de code in het topic van vorig jaar over het CO-2016 Util displlay en dit topic waar ik nu in schrijf is wat mij betreft afgesloten.
https://www.circuitsonline.net/forum/view/133092
Groet,
Blackdog
) is wat ik beschreef nix anders, meer, of minder, dan een state machine. Ik heb het alleen niet zo benoemd...