Vraagje output Attiny84

Hallo,

Ik ben bezig met schakeling met Attiny 84.
Schakeling heeft 5 inputs en 2 outputs.
Schakelingetje werkt op 5V
Nu zit ik wat te meten, maar als output HIGH is dan is spanning 2.3 tot 2.9 volt.
Moet deze niet 5V zijn ?
Ik programmer de Attiny via Arduino IDE (met een Uno)
Is dit normaal of doe ik iets verkeerd.

Alvast bedankt.

Er zit geen belasting aan de uitgang ?

Op 18 oktober 2020 14:55:04 schreef Aart:
Er zit geen belasting aan de uitgang ?

Jawel, weerstand met LED of een relay driver NUD3160LT
Probleem kwam aan het licht dat relay driver relais net niet genoeg bekrachtigd. Op A6 - A7 (pin 7 en 6)
meet ik maar rond de 3 volt.

Arco

Special Member

Waarschijnlijk is de serieweerstand van de led dan te klein.
(je kunt niet meer als een paar mA uit een gewone MPU poort trekken, anders duikelt de spanning in elkaar.)

Zet er een transistor tussen anders.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

AVR output pinnen zijn tamelijk stevig. Die moet je toch echt zwaar overbelasten om de spanning naar 2V3 te trekken.

Alvast bedankt voor de reacties.

Net nog even gemeten.

Relais trekt 25mA stroom

Als ik 5 volt op NUD3160LT relais driver zet trekt deze 45uA
Als ik er 3,3 volt op zet nog 25uA
Relais trekt voldoende aan.

Stuur ik driver via Attiny aan dan zakt spanning naar 2.7 tot 2.9 volt. (gemeten op PIN Attiny)
Stroom moet ik nog even meten.
Morgen eens met scope op pin van Attiny meten.

Blijft raar verhaal. Of er gebeurd iets raars in mijn void loop....

Lucky Luke

Golden Member

Weet je zeker dat de pin als output staat ingesteld? (Dat je niet alleen de pull-up schakelt).

(Hoe is DDRn ingesteld? / Post eens een stukje code) Oh. Arduino. Uhm. Staat je "pinmode" op "Output"?

(Bij AVR's staan de pinnen standaard als input. Er is een DataDirectionRegister (DDR) een PinOutputRegister (PORT), en een PinInputDataRegister (PIDR). Als de pinnen op input staan en je schrijft naar het PORT register, zet je de pull-ups aan. Als je ze op output zet, schakel je de pinnen echt. In beide gevallen kan via het PIDR register worden teruggelezen wat de staat van de pin is.

Sommige "luxere" microcontrollers (ARM) hebben apparte registers voor pull-ups/downs, maar bij de AVR wordt daar dus het PORT register voor gebruikt. Met als gevolg dat als je de pinnen als input laat staan, en je schrijft naar PORT, het onbelast lijkt alsof de uitgang gewoon schakelt, maar zodra je er ook maar een klein beetje belasting aan hangt gaat het mis, want via die pull-ups kan nauwelijks stroom geleverd worden. (ik weet zonder opzoeken niet of ze als 50 uA stroombron, of als 50 kOhm weerstand gespecificeerd zijn, maar in beide gevallen zal de "drive strength" vaak te weinig zijn om ze op die manier als output te gebruiken en gaan er dus dingen mis.

))

Eluke.nl | handgetypt | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)
benleentje

Golden Member

Relais trekt 25mA stroom

Als ik 5 volt op NUD3160LT relais driver zet trekt deze 45uA
Als ik er 3,3 volt op zet nog 25uA
Relais trekt voldoende aan.

Wat is nu micro- of milliampere?

Maar 45mA is dus veel te veel voor die arme Atiny pin en dan zit er ook nog een led bij van misschien 20mA en dan zit je aan 65mA dat is ruim 6x hoger als ik zelf standaard zou doen. Ik hoe liever de stroom zo laag mogelijk.

Lucky Luke

Golden Member

Op 18 oktober 2020 21:19:58 schreef benleentje:
[...]

Wat is nu micro- of milliampere?

Voor het relais zelf mili, voor de input pin van de driver micro. Althans, dat is hoe ik het las.

Hmm. Nog een andere gedachte @TS: voedt je het geheel soms uit de USB poort? Trek je niet gewoon de hele voedingsspanning omlaag? (Al denk ik dat je in totaal nog ruim onder de 100mA zit, dus het lijkt me niet dat dan je voedingsspanning instort, maar als je dingen uit USB voedt moet je er wel op letten dat je niet teveel stroom uit een poort trekt.)

En niet aan dit probleem gerelateerd: heeft het relais een blusdiode/vrijloopdiode (of zit die in de driver)?

Eluke.nl | handgetypt | De mens onderscheid zich van (andere) dieren door o.a. complexe gereedschappen en bouwwerken te maken. Mens zijn is nerd zijn. Blijf Maken. (Of wordt, bijvoorbeeld, cultuurhistoricus)

voedt je het geheel soms uit de USB poort?

Goede vraag, zeker de bijgeleverde kabeltjes uit China bij Arduino's zijn vaak niet van hoge kwaliteit, daar valt zomaar wat spanning over bij 100mA.

It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Arco

Special Member

Altijd een losse voeding gebruiken. USB is niet bedoeld als voeding voor relais e.d.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Nogmaals bedankt voor meedenken.

Het is een aparte 5V 1A voeding

Het is uA en geen mA.

Pinmode staat op output.

Ik zal morgen blink sketch eens laden en de aan/uit tijd wat langer zetten.
Kijken wat ik dan kan meten.
Wil ook even de output stroom van de Attiny meten.

Nogmaals bedankt.

Op 18 oktober 2020 21:19:58 schreef benleentje:
Maar 45mA is dus veel te veel voor die arme Atiny pin

Hoewel het volgens atmel niet mag, gaat het bij mijn weten gewoon best wel lang goed. De uitgangsweerstand lees je in bovenstaande grafiek af als 0.5V bij 18mA = 28 Ohm.

Bij 45mA krijg je dan 1.25V, dan zou je dus 3.8V op de output krijgen. Dit alles onder het worst-case geval dat het om 45mA zou gaan, hetgeen de TS heeft bevestigd dat niet het geval is.

Direct het relais uitsturen gaat dus ook gewoon.

De pullup weerstand is ongeveer 50k. Met een stroom van 45uA levert dat 2.3V spanningsval op, dus blijft er 2.7V over.

HIGH is dan is spanning 2.3 tot 2.9 volt

Dat zit gewoon prima binnen de range.

Ik zeg: Luke heeft gewoon gelijk:

Op 18 oktober 2020 20:38:48 schreef Lucky Luke:
Weet je zeker dat de pin als output staat ingesteld? (Dat je niet alleen de pull-up schakelt).

En ts niet:

Op 18 oktober 2020 21:55:20 schreef Sinnersteel:
Pinmode staat op output.

Dat zal de bedoeling zijn, maar je metingen zijn hartstikke consistent met dat dit op de een of andere manier niet het geval is.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Dat een pin 45mA kan leveren is nog geen reden om het ook zo te doen, houd je aan de datasheet!
(door een rood licht rijden gaat ook meestal goed totdat het een keer fout gaat... ;) )

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Op 18 oktober 2020 23:40:10 schreef Arco:
(door een rood licht rijden gaat ook meestal goed totdat het een keer fout gaat... ;) )

Het heeft er ook alles van weg dat TS een kruising overgestoken is en nu een bekeuring voor door rood rijden krijgt.

Waarschijnlijk stond het stoplicht dan op rood, ookal was er geen botsing ;-)

Op 18 oktober 2020 23:40:10 schreef Arco:
Dat een pin 45mA kan leveren is nog geen reden om het ook zo te doen, houd je aan de datasheet!
(door een rood licht rijden gaat ook meestal goed totdat het een keer fout gaat... ;) )

Mee eens... Maarrrrr... het is NIET de reden dat het niet werkt.

In zo'n geval als hier, zou je dus meten, constateren dat de uitgangsspanning niet 4.99V is zoals je verwacht, maar 3.8. Dan ga je denken: loopt er zoveel stroom? Dan meet je en inderdaad! En dan ga je een driver/tor ontwerpen.

Een goede engineer kan dit soort dingen vantevoren inschatten. Maar die inschattingen komen alleen met ervaring. Het is STOM om te verwachten dat iemand die net in dit vakgebied begint dit soort inschattingen feilloos kan maken. Op mijn elektronica prakticum moest ik een versterkerschakeling bouwen en doorrekenen. Dus ik iets uitgerekend. Ingeleverd: Fout, doe nog maar een keer. Dus ik doe het nog een keer. Zelfde antwoord. Fout doe nog maar een keer. De derde keer heb ik geprotesteerd: Jongens, ik heb het nu al 3x fout gedaan, ik krijg ervaring, maar de 4e keer komt er gewoon precies hetzelfde uit. IK heb een hint nodig om te weten wat er mis gaat. Blijkt dat ik als onervaren elektronicus de ingangsimpedantie verwaarloosd had waar die niet te verwaarlozen was!

Dit soort inschattingen: "De basis stroom van een tor die een relais aanstuurt is verwaarloosbaar, je hoeft niet te controleren dat dit onder de max van de chip blijft. Je hoeft de max van je chip niet op te zoeken, gaat gewoon goed." dat is iets wat pas komt nadat je wat ervaring hebt opgedaan (en het een paar keer nodeloos hebt zitten uitzoeken en verifieren).

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Allen,

rew en Luke hadden inderdaad gelijk :)
Met blink sketch kwam ik erachter.
Foutje in code......

Bedankt voor de tips en hints.

Hier mag slotje op.

Dat slotje is hier niet gebruikelijk. Misschien kom je later in dit project met nog een vraag, en dan kan je gewoon hier verder: Dan kan iedereen de voorgaande historie nog nalezen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Op 19 oktober 2020 17:14:26 schreef rew:
Dat slotje is hier niet gebruikelijk. Misschien kom je later in dit project met nog een vraag, en dan kan je gewoon hier verder: Dan kan iedereen de voorgaande historie nog nalezen.

OK helder.

Ik heb toch jullie hulp/info weer nodig.
Het gaat mis bij digital inputs. Ik wil A0 (pin13) en A1 (pin12) gebruiken als digital input.(digitalRead)
Echter het is me niet geheel duidelijk/helder hoe ik pin als input moet instellen bij ATtiny84.
Gaat dit lukken met onderstaande of......

int Pin1 = 0;
int Pin2 = 1;
int Input1;
int Input2;

void setup() {
pinMode(Pin1, INPUT);
pinMode(Pin2, INPUT);
}

void loop() {
Input1 = digitalRead(Pin1);
Input2 = digitalRead(Pin2);

}

EricP

mét CE

Geen idee hoe dat in dat arduino-taaltje moet.
Maar normaal zet je in DDRx de direction. In PINx lees je 8 pins uit. En in PORTx set je de output.
En daar zijn nog wat randvoorwaarden, als ik het me goed herinner kun je als de pin als input staat in PORTx de interne pull-up aan en uit zetten. En ik meen me iets te herinneren dat je bij een output pin met iets in PINx de boel kan togglen - nooit gebruikt, maar ik heb zoiets eens gelezen.

Let wel: die registers zijn 8-bits registers die alle pins van 1 poort bevatten.

Ik ken dat arduino-taaltje niet (het lijkt wat op C met een shitload aan al dan niet brakke libraries), maar of Pin1=0 nou zo'n gelukkige configuratie is? Dan zou je de beschrijving van de functies moeten lezen. Gevoelsmatig heeft pin 0 als 'waarde' 0x01 in de registers. Pin 1 komt dan op 0x02. En pin 3 op 0x04. Zo bouw je de bitmap op. En doorgaans zijn er wel defines voor de betreffende pins. '0' of '1'... het zou kunnen als die functie dat zo wil. Ik zou er een define of een macro omheen verwachten. Maar ja, je weet nooit wat dat arduino-taaltje er van bakt :)
Ofwel: RTFM!

Op 20 oktober 2020 08:53:38 schreef EricP:
Geen idee hoe dat in dat arduino-taaltje moet.

Tja. Dan is de rest van je bericht nutteloos. In het "arduino taaltje" moet je de pin modes instellen met een aanroep van de "pinMode" functie. Die gaat dan in de DDR registers lopen prutsen.

@Sinnersteel, Jou code ziet er in princiepe goed uit. Maar welke pin ie dan daadwerdelijk gaat lopen lezen weet ik niet. Ik heb even wat zitten googlen, en.... blijkt dat het daar over een '85 ging en jij hebt een '84.

De "atmega328" waar de arduino spullen origineel voor zijn, die heeft geen port-A terwijl de attiny dat wel heeft, toch?

Anyway... Even doorzoekend: https://42bots.com/tutorials/programming-attiny84-attiny44-with-arduin…

Daar vind ik een layout en nummering die consistent is met wat jij zegt.

Ik /denk/ dat moderne arduino ook defines heeft voor "A0" als de eerste analoge pin. Misschien is het beter om die te gebruiken.

Alles bij mekaar: Ik zou zeggen dat je code het zou moeten doen. Wat werkt er niet?

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Op 20 oktober 2020 09:34:04 schreef rew:
[...]Tja. Dan is de rest van je bericht nutteloos. In het "arduino taaltje" moet je de pin modes instellen met een aanroep van de "pinMode" functie. Die gaat dan in de DDR registers lopen prutsen.

@Sinnersteel, Jou code ziet er in princiepe goed uit. Maar welke pin ie dan daadwerdelijk gaat lopen lezen weet ik niet. Ik heb even wat zitten googlen, en.... blijkt dat het daar over een '85 ging en jij hebt een '84.

De "atmega328" waar de arduino spullen origineel voor zijn, die heeft geen port-A terwijl de attiny dat wel heeft, toch?

Anyway... Even doorzoekend: https://42bots.com/tutorials/programming-attiny84-attiny44-with-arduin…

Daar vind ik een layout en nummering die consistent is met wat jij zegt.

Ik /denk/ dat moderne arduino ook defines heeft voor "A0" als de eerste analoge pin. Misschien is het beter om die te gebruiken.

Alles bij mekaar: Ik zou zeggen dat je code het zou moeten doen. Wat werkt er niet?

Nog even wat info:
Ik programmeer met Apple (Macbook Pro)
Ik gebruik IDE 1.8.13

Als ik via de geposte code een uitgang hoog wil maken werkt dat niet.
A6 (Pin 7) en A7 (Pin 6) zijn als uitgang gedefinieerd. A7 (Pin6) wordt meteen hoog bij aansluiten voeding. Aangesloten LED gaatbranden maar ...... 3,2 volt op A7 in plaats van 5V....
Laad ik code met alleen A6 en A7 hoog (digitalWrite = High) dan gaan LED's aan en meet ik 5V.
Ik doe iets fout maar weet even niet wat ....... |:(

Op 20 oktober 2020 13:18:41 schreef Sinnersteel:
Als ik via de geposte code een uitgang hoog wil maken werkt dat niet.

En het hoort ook niet te werken want je hebt alleen inputs gedefinieerd.

A6 (Pin 7) en A7 (Pin 6) zijn als uitgang gedefinieerd.|:

NEE, niet in de code hierboven!

Als je nu eerst eens de code post waar je ook over schrijft dan hoeft niet iedereen te gokken wat je aan het doen bent!

reading can seriously damage your ignorance
benleentje

Golden Member

Je moet bij een arduino de pinnumers gebruikt die erop staan op de PCB niet de nummer uit de datasheet als je DigitalWrite gebruikt. De arduino software remapt die A0 naar de werkelijk pinnummer.

Of je moet in assembly gaan werken dan kan je wel direct de registers en poorten schrijven zoals in de datasheet.