Question:
Utilisez le PIN RESET sur Attiny85 comme entrée avec diviseur de tension
cocco
2015-10-13 23:12:14 UTC
view on stackexchange narkive permalink

Diviseur de tension & pull-up avec analogRead

L'Attiny a 6 broches que vous pouvez utiliser comme E / S.

Alors que 5 d'entre eux sont vraiment faciles à utiliser la broche 1, le PIN de réinitialisation, réinitialise évidemment le microcontrôleur si la tension est inférieure à environ 2,5v.

En reprogrammant les fusibles pour utiliser la broche de réinitialisation comme une broche d'E / S i Je ne peux plus utiliser le programmeur ISP arduino.

La seule façon de l'utiliser comme entrée, sans réinitialiser le MC, est de rester au-dessus de 3v et d'utiliser analogRead?

Après avoir enfin compris cela, j'ai joué un peu avec mon multimètre (seul outil de mesure disponible) et j'ai expérimenté des résistances.

schematic

simuler ce circuit - Schéma créé à l'aide de CircuitLab

  Le bloc d'alimentation (batterie) sort autour de 5.11v. j'obtiens 5.11v sur la "broche de réinitialisation". pressé j'obtiens 3.41v sur la "broche de réinitialisation". pas pressé la résistance est 39K Ω.pressée la résistance est 19K Ω.  

Maintenant, comme je ne veux pas reprogrammer les fusibles ou brûler l'Attiny85, ma question est:

Puis-je nuire d'une manière ou d'une autre à l'attiny en utilisant ce circuit avec analogRead (); ?

Les lectures seraient d'environ 680 lorsque vous appuyez sur ou de 1000 lorsque vous ne appuyez pas.

Dois-je utiliser d'autres résistances pour consommer moins de courant / envoyer beaucoup de courant en continu? ... si cela fonctionne ...

Quelconque d'autres suggestions?


Remarques .:

enter image description here

J'utilise les broches 2 (PB3), 3 (PB4), 5 (PB0), 6 (PB1) comme canaux PWM (avec des transistors npn); rouge, vert, bleu, blanc.

Utilisé la broche 7 (PB2) comme bouton, mais j'ai aussi besoin d'un potentiomètre ...

SO:

broche 7 (PB2) devient Potentiometer (analogRead).

et, j'espère

pin 1 (PB5) devient un bouton utilisant analogRead ou autre .

EDIT↑

ce site explique plus en détail le problème, même si j'ai besoin d'un simple bouton.

http://www.technoblogy.com/show?LSE

EDIT^

J'ai pas tester le circuit ci-dessus. Je vous demande si cela pourrait fonctionner, s'il y a quelque chose qui ne va pas. J'ai peur d'endommager la broche.

Tout ce que je sais, c'est que:

  1. il se réinitialise avec une basse tension en utilisant la configuration normale du potentiomètre ou la configuration normale du bouton
  2. si je place les fusibles, je ne peux pas reprogrammer la puce

  3. pin1 = pb5 = adc0 = analogread (A0) = Arduino pin5 = RESET

Je suis désolé, mais je ne comprends pas très bien quel est le problème.Une fois que la réinitialisation est définie comme broche d'E / S, le MCU ne pourra plus se réinitialiser.Vous pouvez lui fournir moins de 2,5 V.
Une fois que la réinitialisation est définie comme broche d'E / S, vous ne pouvez pas la reprogrammer car la réinitialisation est nécessaire avec le FAI
Oui.Vous souhaitez donc le reprogrammer?
peut être?s'il n'y a pas besoin d'un autre circuit complexe.
Vous devrez créer un circuit HVSP (programmation série haute tension): http://www.instructables.com/id/AVR-Attiny-fusebit-doctor-HVSP/ Ce n'est pas vraiment si compliqué.
Je pense que c'est un peu trop complexe pour moi atm ... btw je n'ai pas toutes ces pièces.donc pour l'instant j'espère contourner ce programmeur série haute tension.Le FAI avec arduino est vraiment rapide car j'ai déjà fait un circuit / bouclier pour un arduino.
y a-t-il un problème avec le circuit de bouton ci-dessus?
Vous pouvez traiter la broche de réinitialisation comme une autre broche d'E / S.Cela signifie que vous activeriez le pull-up interne, connectez-le à un bouton sur le côté.Et connectez l'autre côté du bouton à la terre.
Non, rien n'est faux, mais pour lire quand un bouton est activé / désactivé, c'est un peu inhabituel.Essayez ci-dessus.
oui je sais que ce serait plus facile ... je n'ai pas de programmeur haute tension pour le moment.Je connais le dragon ou le stk5000 ... ou votre circuit.Je veux apprendre quelques-unes de ces astuces électroniques ... jouer avec la tension et le courant.c'est quelque chose que j'ai trouvé par moi-même en testant avec un multimètre.la seule crainte que j'ai, c'est de brûler quelque chose ... car je ne connais pas tous les calculs électroniques
J'ai dit que j'espère que vous pourrez m'en dire plus sur mon circuit.si cela fonctionne ..... sinon, ou si cela fonctionne mais cela consomme trop ... ou peut-être comprendre si cela nuit d'une manière ou d'une autre à l'une des autres parties du circuit proche et pourquoi
"peu inhabituel" expliquent les pls.
C'est en fait une idée très intéressante - utiliser la broche comme entrée analogique dans une plage restreinte, sans désactiver sa fonctionnalité de réinitialisation!En supposant que cela fonctionne pour vous, l'expérience à considérer serait de mesurer soigneusement la consommation d'alimentation de la puce lorsque vous modifiez la tension d'entrée (une tâche qui n'est pas triviale, car vous avez besoin d'un ampèremètre avec une tension de faible charge.).Ce que vous recherchez, c'est la consommation excessive qui peut se produire dans certaines topologies de totems avec une entrée de niveau logique indéterminée.
Si vous pouvez réduire la tension d'entrée dans la plage souhaitée sans augmenter le courant d'alimentation, cela peut peut-être suggérer que l'idée est réalisable.Bien sûr, si vous abaissez la tension au point où vous déclenchez une réinitialisation, le courant diminuera probablement considérablement, ce qui ne correspond pas aux données que vous cherchez à acquérir.
J'utilise le circuit @bigjosh depuis un moment maintenant et cela fonctionne parfaitement.donc j'ai une autre broche sur l'attiny.je l'utilise pour un pwm 4 ch, 1 bouton 1 pot.
Utiliser un Pot à la place du bouton est également possible, la résolution serait inférieure à 500 sur un arduino, il suffit de mesurer cela la première fois.
Vous pouvez lire la tension sans broche!Voir l'exemple ici: https://arduino.stackexchange.com/questions/48739/vcc-measurement-with-internal-1-1v-reference-fails-on-3-3v-powered-atmega328
Un répondre:
bigjosh
2015-10-14 08:14:21 UTC
view on stackexchange narkive permalink

Oui, vous pouvez utiliser le convertisseur analogique-numérique sur la broche 1 même si la réinitialisation externe est toujours activée sur cette broche tant que la tension sur cette broche ne descend pas en dessous du seuil de réinitialisation.

Voici une version plus simple de votre circuit qui fonctionne de manière fiable ...

schematic

simuler ce circuit - Schéma créé avec CircuitLab

...

Lorsque le bouton SW1 est enfoncé, les résistances R2 et R1 forment un diviseur de tension qui met environ 4,54 volts sur la broche RST.

Voici un programme de test Arduino qui allumera la LED embarquée chaque fois que vous appuyez sur le bouton ...

  int led = 1; // Led embarquée sur trinketsetup () {pinMode (led, OUTPUT);} loop () {if (analogRead (0)) > 900) {// la broche de réinitialisation est proche de Vcc digitalWrite (led, 0); // éteindre la led} else {// la broche de réinitialisation est inférieure à 900/1024 * 5 vcc digitalWrite (led, 1); // allumer la LED}}  

Notes:

Un Trinket est essentiellement juste un ATTINY85 qui a un connecteur USB et un chargeur de démarrage préchargé il est donc facile d'y insérer du code à l'aide de l'IDE Arduino. Tout ce qui est dit ici sur le Trinket vaut pour un ATTINY85 nu et vice versa.

La fiche technique de l'ATTINY85 spécifie la tension minimale sur la broche de réinitialisation qui sera interprétée comme "1" comme 0,9 volts * (V IH2 ), qui sort à 4,5 volts. Puisque la sortie ~ 4,54 volts par le diviseur de tension est plus élevée que cela, elle doit être considérée comme un "1" et ne pas réinitialiser la puce.

enter image description here

Il y a un pullup 30k-60k intégré sur la broche de réinitialisation, donc nous pourrions en principe simplement utiliser, disons, un 30k ohms R2 et pas besoin de R1, mais j'ai trouvé que vous pouvez obtenir des réinitialisations parasites du bruit de commutation avec uniquement le pullup interne.

J'ai choisi des résistances 10k & 1k ohms car elles sont courantes et fournissent suffisamment de courant pour fonctionner de manière fiable, mais ne gaspillent que 2 mA lorsque le bouton est enfoncé. Très peu de courant est utilisé lorsque le bouton n'est pas enfoncé.

J'ai choisi 1000 comme valeur de seuil sur analogRead parce que cela donne beaucoup de marge des deux côtés pour les inexactitudes dans les valeurs des deux résistances. Lorsque le bouton n'est pas enfoncé, la broche de réinitialisation doit être très proche de Vcc et donc la lecture analogique () doit être très proche de 1023. Lorsque le bouton est enfoncé, la tension lors de la réinitialisation sera tirée plus bas par R2, mais exactement combien plus bas dépend sur les valeurs exactes de R1 et R2 (la valeur réelle des résistances peut être très différente de leur valeur marchande en raison de la tolérance) et du pull-up interne, j'ai donc choisi une valeur plus élevée que le point médian.

je savais qu'il y avait un moyen plus simple! .... merci pour votre réponse précise ... je l'ai testé et il fonctionne parfaitement!btw j'utilise des résistances 10k ....
Est-ce mieux que d'utiliser une diode Zener 3v3 au lieu de R2?Avec la résistance 1k, cela donne la broche de réinitialisation 3V par mon voltmètre.
@ThatAintWorking Je pense qu'un zener fonctionnerait bien, mais il est trop meurtrier.Tant que la broche RESET est supérieure à 0,9 volts, la puce ne se réinitialise pas et tant que vous pouvez voir la chute de tension (quelle qu'elle soit) sur l'entrée analogique, alors tout va bien.
En êtes-vous vraiment sûr?Ce que je viens de lire, c'est que \ $ VIH2 \ $ est de 0,9 * VCC Volt et non de 0,9 Volt
@Unknown123 Vous avez absolument raison!Merci pour la correction.J'ai mis à jour la valeur de R2 et quelques calculs pour refléter cela.Merci encore!
Cela fait presque trois ans, je suis triste devant l'affiche originale, au fait, votre code est toujours 900 et non 1000, avez-vous une idée pour pouvoir travailler avec potentio en utilisant une très petite marge?


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...