Forum: Mikrocontroller und Digitale Elektronik ATtiny12 - Disable External Reset!?


von HagBurt (Gast)


Lesenswert?

Hallo!

Ich hab mich gestern an ein mini - projekt mit dem ATtiny12 gewagt.
Eigentlich sollte das projekt nur die Pins PB0, PB1 und PB2 belegen.
Jetzt sollte ich aber doch einen Port mehr haben und da ich ein
externes Quarz benötige bleibt mir nur noch der Port PB5(RESET).

Im Datenblatt (S.46 ganz unten) steht dass man mit dem programmieren
des RSTDISBL Bits den Externen Reset - Pin deaktivieren kann. Somit
könnte ich diesen Pin als Port PB5 benutzen, oder???

Dann ist es aber nicht mehr möglich den Speicher des Zwergs über ISP zu
erreichen..... Im DB (S.46) steht noch folgendes:

Note: 1. If the RSTDISBL Fuse is programmed, then the programming
hardware should apply +12V to PB5 while the ATtiny12 is in Power-on
Reset. If not, the part can fail to enter programming mode caused by
drive contention on PB0 and/or PB5.

Wenn ich das richtig verstehe muss ich, wenn ich das RSTDISBL Bit mal
programmiert hab, +12V an den (früheren) Reset Pin legen und dann die
Betriebsspannung des Chips einschalten um wieder in den
Programmiermodus zu kommen???!!!
Wenn das stimmt, muss ich dann wärend des gesamten programmier -
vorgangs diesen Pin auf +12V halten???

Bin ein wenig ängstlich weil ich nur den einen ATtiny hab und des
Projekt sollte am Dienstag fertig sein!!!

Bin dankbar für jede Antwort!!!

MFG, HagBurt

von Frank (Gast)


Lesenswert?

machs doch einfach. Wenn du einen HV Programmer hast ist es kein
Problem. Hast du Keinen, dann hast du mal wieder Zeit am realen Leben
teilzunehmen.

bye

Frank

von H.joachim S. (crazy_horse)


Lesenswert?

hm, mit nur einem einzigen lebenden Exemplar sollte man da schon etwas
vorsichtiger sein :-)
Vielleicht erstmal schauen, ob man  nicht die anderen I/Os mehrfach
nutzen kann?
Genau weiss ich es nicht, aber ich glaube nicht, dass es damit getan
ist, 12V an den Reset-Pin zu legen und dann weiter wie beim ISP...
Ohne HV-Programmer ein heikles Unternehmen.
Evtl. kannst du ja den Reset-Pin trotzdem nehmen, indem du MCUSR.EXTRF
auswertest? Sicher nicht unbedingt schön, aber je nach Anwendung
durchaus machbar.

von Laeubi (Gast)


Lesenswert?

Genau sag doch mal was du dranhängen hast, vieleicht kommst du ja
trozdem mit den Pins aus ohne Reset zu disablen.

von Jadeclaw D. (jadeclaw)


Lesenswert?

@Hagburt: 12V an Reset anzulegen, um bei gesetzter RSTDISBL-Fuse wieder
in den ISP-Modus zu kommen, das funktioniert nicht.
Grund: Bei dem Hochvolt-Modus (12V) wird ein völlig anderes Protokoll
verwendet. ISP-Programme können dies nicht.
Also, entweder einen Hochvolt-Prrogrammer verwenden, z.B. das Atmel
STK500 oder sich einmal überlegen, wie man die Anzahl der benötigten
Portpins reduzieren kann.
Oder einen anderen Controller nehmen. ;-)

Gruss
Jadeclaw.

von HagBurt (Gast)


Lesenswert?

Danke für die Antworten!!

Ist der selbstbau eines HV-Programmers sehr aufwändig???
Die ISP - Schaltung ist ja sehr einfach nachzubauen........

@Laeubi: Im Anhang ein jpg von meiner kleinen Schaltung!

Es soll eine Sirene werden wo gleichzeitig im Sirenen - Takt 2 blaue
LEDs abwechselnd blinken. Über den Taster T1 soll man den Modus
auswählen können:
     1. Blinken
     2. Blinken + Sirene
     3. Warten bis T2 betätigt wird (Erschütterungstaster)

Ich bin nicht so der Elektronik - freak und es gibt sicherlich einige
Änderungs - möglichkeiten.....

Am Port PB5 / RESET soll eben mein Taster für Erschütterungen
angebracht werden.....

Danke schonmal, MFG HagBurt

P.S. @Frank:  ???War das auf die Uhrzeit bezogen???

von HagBurt (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, nochmal mit Anhang............

MFG HagBurt

von Karl H. (kbuchegg)


Lesenswert?

Nun ja.
Wozu brauchst du da einen Quarz?
Der interne Oszillator ist zwar nicht der genaueste
und driftet auch, aber ob die Leds jetzt im 1 Sekunden
oder 1.0001 Sekunden Takt blinken, kratzt ja wohl
niemanden wirklich.

von Jadeclaw D. (jadeclaw)


Lesenswert?

"Wozu brauchst du da einen Quarz?"
Das wollte ich auch gerade fragen.
Nunja, ein Quarz wirkt da dran dann doch irgendwie wie ein Heckspoiler
an einem Trabbi.

Zum Thema HV-Programmer:
Es gibt zwei, die sich nach Rückmeldung im hier im Forum auch als
funktionsfähig erwiesen haben:
HV-Prog, ein Nachbau des Programmierteils des STK500:
http://www.der-hammer.info/hvprog/index.htm

Eine einbfachere Version ist hier:
http://elm-chan.org/works/avrx/report_e.html
Diese Version unterliegt PC-seitig jedoch den gleichen Einschränkungen
wie die einfachen ISP-Adapter. Das heißt, dort wo PonyProg am
Parallelanschluß geht, geht dieser auch.

Gruss
Jadeclaw.

von HagBurt (Gast)


Lesenswert?

Ich hatte eigentlich auch vor ohne quarz zu arbeiten!
Die LEDs sind auch nicht unbedingt das Problem.
Es geht dabei ehr um den Lautsprecher.... Die ausgegebenen Töne haben
manchmal unterbrechungenn und manchmal laufen sie ein paar sekunden
ohne unterbrechung.... mit nem 4MHz Quarz
(und alle delays * 3,3) hab ich dieses Problem nicht!

Ich hab vorher noch was über das "Oscillator Calibration Register
– OSCCAL" gelesen.... auf seite 32 unten ist ne tabelle mit min-max
werten.... was haben diese werte zu bedeuten?

Mein Oscillation Callibration Byte hat den wert 0x5E ?!
Kann es damit etwas zu tun haben dass die tonausgabe nicht regelmäßig
abgearbeitet wird???

Danke, HagBurt

von Karl H. (kbuchegg)


Lesenswert?

Quarz oder nicht Quarz ist da sicher nicht
das Problem. Eher schon dein Programm.
Zeig mal.

von Jadeclaw D. (jadeclaw)


Lesenswert?

Nein. Kann es sein, dass in einer Interruptroutine zuviel Zeit
verbraucht wird?
Mit dem OSCCAL-Register kann man den internen RC-Oszillator auf die
Sollfrequenz bringen, die angegebenen Werte besagen, welche Streubreite
in den Einstellungen zu erwarten ist.
Seite 76 zeigt auch die Abhängigkeit der Frequenz von Spannung und
Temperatur. Der 0x5E-Wert, ist der, welcher bei der Fertigung
ausgemessen wurde.

Gruss
Jadeclaw.

von Karl H. (kbuchegg)


Lesenswert?

Ich seh grad, du hast den obligatorischen Abblock
Kondensator nicht verbaut: 100nF zwischen Vcc und
GND.
Die Unterbrechungen könnten daher rühren, dass du
kleine Unterbrechungen in der Versorgungsspannung
hast und der Prozessor jedesmal einen Reset macht.

von HagBurt (Gast)


Angehängte Dateien:

Lesenswert?

Hier mein code-auszug für die Sirenen - generierung:



.include "tn12def.inc"


sound_lights:                     ;--------  TATÜ TATA  and  Blue -
blink - lightss

  sbi PORTB, 2

  ldi r31, 127
  ldi r30, 2
main_temp1:

  rcall wait1
  dec r31
  cpi r31, 0x00
  brne main_temp1
  dec r30
  cpi r30, 0x00

  brne main_temp1

  cbi PORTB, 2

  ldi r31, 240
  ldi r30, 2
main_temp2:
  rcall wait2
  dec r31
  cpi r31, 0x00
  brne main_temp2
  dec r30
  cpi r30, 0x00
  brne main_temp2

  rjmp sound_lights

;-----------------------------------------------------

wait1:
  sbi PORTB,0

  ldi r16, 233
  ldi r17, 1
temp_wait1:
  dec r16
  cpi r16, 0x00
  brne temp_wait1
  dec r17
  cpi r17, 0x00
  brne temp_wait1

  cbi PORTB,0

  ldi r16, 233
  ldi r17, 1
temp_wait2:
  dec r16
  cpi r16, 0x00
  brne temp_wait2
  dec r17
  cpi r17, 0x00
  brne temp_wait2
  ret

;----------------------------------------------------

wait2:
  sbi PORTB, 0

  ldi r16, 70
  ldi r17, 1
temp_wait3:
  dec r16
  cpi r16, 65
  brne temp_wait3
  dec r17
  cpi r17, 0x00
  brne temp_wait3

  cbi PORTB, 0

  ldi r16, 70
  ldi r17, 1
temp_wait4:
  dec r16
  cpi r16, 65
  brne temp_wait4
  dec r17
  cpi r17, 0x00
  brne temp_wait4
  ret



sorry dass er noch nicht kommentiert ist. Zeit-schleifen-fehler sind
meiner meinung keine drin......

Ich hab mit meinem 30€ USB - Oszi mal ne kleine Messung während des
Betriebes mit dem internen RC-Oszillator drangehängt..... gemessen
wurde über dem Basis - Vorwiderstand am Pin PB0.

MFG, HagBurt

von HagBurt (Gast)


Lesenswert?

@Karl Heinz Buchegger : Hast recht, mit 100nF entstörkondensator ist das
verhalten etwas besser. (nur noch 2 - 3 Unterbrechungen)

Der Kommentar   ;--------  TATÜ TATA  and  Blue -    müsst ihr
ignorieren...

MFG, HagBurt

von Jojo S. (Gast)


Lesenswert?

wird am Anfang des Programms auch der Stack initialisiert?

von HagBurt (Gast)


Lesenswert?

stimmt, da war noch was......

Aber eigentlch benötige ich ja den stack garnicht für die sicherung von
rücksprung - addressen da ich ja kein subrotinen "call" sondern nur
hin und her "rjmp"....., oder???

Und das Programm funktioniert ja fehlerfrei mit externem quarz....
nur sind die töne halt hochfrequenter....

MFG, HagBurt

von Jojo S. (Gast)


Lesenswert?

also ich sehe da schon ein 'rcall wait1/2'. Aber wenn der Ram Bereich
sonst nicht verwendet wird pasiert wahrscheinlich nix schlimmes. Aber
sauberer wäre es schon.

von Marco S. (masterof)


Lesenswert?

abo

von H.joachim S. (crazy_horse)


Lesenswert?

Tiny12 hat nur nen Hardwarestack...

von Hannes L. (hannes)


Lesenswert?

Für diese "Lappalie" brauchst du keinen Quarz.

Du solltest dein Programm anders strukturieren, also statt
Warteschleifen den Timer-Interrupt verwenden. Leider hat der Tiny12 nur
einen Timer, und dieser hat auch keine Compare-Einheit, mit der du den
Sirenenton direkt in Hardware erzeugen könntest. Mit dem Tiny15 wärst
du zum selben Preis besser bedient. Tiny13 und Tiny25 sind zwar noch
fortschrittlicher, damit habe ich aber noch keine Erfahrung. Eine
kleine Einführung in die Interruptprogrammierung mit Tiny15 findest du
hier: http://www.hanneslux.de/avr/divers/index.html

Das Calibrieren des internen Oszillators ist für diese Anwendung auch
nicht unbedingt erforderlich, ohne Calibration rennt dein Tiny12 eben
nur mit 800kHz..1MHz.

Wenn du beide LEDs an einen Ausgang hängst, dann wird in deiner
Schaltung immer eine leuchten. Die Transistoren für die LEDs brauchst
du auch nicht, der Tiny12 kann die LEDs selbst treiben.

Du könntest die beiden blauen LEDs, zwei Si-Dioden und die Widertände
direkt in Reihe zwischen Vcc und GND schalten und mit einem
Controllerpin die LEDs wechselweise schalten:

Vcc
 blaue LED
 Si-Diode
 Widerstand
Controller-Pin
 Widerstand
 Si-Diode
 blaue LED
GND

Die Flussspannungen der Dioden sind dann größer als die
Versorgungsspannung, worauf die LEDs erstmal nicht leuchten. Ist der
Controller-Pin auf Eingang ohne PullUp geschaltet, dann sind beide LEDs
aus. Wird der Controller-Pin auf Ausgang geschaltet, so leuchtet bei
L-Pegel die obere LED, bei H-Pegel die untere.

Aber diesen Trick brauchst du nicht, da du ja (ohne Quarz) 5 I/O-Pins
zur Verfügung hast.

...

von HagBurt (Gast)


Lesenswert?

@...HanneS... Lux: Danke für die vereinfachte schaltung.....
Das nächste was ich versucht hätte wäre die timer / IR variante gewesen
da ich schon Interrupt erfahrungen hab....

Trotzdem müsste doch mein Programm so laufen da es ja auch mit einem 4x
schnellerem externen Qarz auch läuft...!!!

MFG, HagBurt

von Hannes L. (hannes)


Lesenswert?

> Trotzdem müsste doch mein Programm so laufen da es ja auch mit
> einem 4x
> schnellerem externen Qarz auch läuft...!!!

Dein Programm habe ich nicht weiter analysiert, nachdem ich
festgestellt habe, dass es nicht mit Timer-Interrupt arbeitet, sondern
mit Warteschleifen und dass es keine Kommentare gibt.

Sorry, es steht dir frei, mich für arrogant zu halten, aber Sowas
(keine Kommentare, Warteschleifen) tu ich mir nicht mehr an, da ist mir
meine Zeit zu schade.

...

von HagBurt (Gast)


Lesenswert?

@...HanneS... Lux: Ich halte dich nicht für arrogant und natürlich steht
es mir frei!
Mir ging es auch nur darum ob es möglich ist dass ein Programm nur
funktioniert wenn es 4x schneller abgearbeitet wird was ich mir einfach
nicht vorstellen kann.....

Ich werd es mal mit dem timer versuchen....
Hab jetzt schon paar mal gelesen dass der interne Oszil. sehr instabil
ist..... bedeutet das instabil im sinne von "große Abweichungen" oder
instabil im sinne von "der oszillator schwingt aus und löst einen Reset
aus" ?

MFG, HagBurt

von H.joachim S. (crazy_horse)


Lesenswert?

instabil ist er nur im Sinne von Frequenzkonstanz. Schwingt sicher.
Zumindest beim AT90S1200 habe ich bei mehreren 1000 Stk keinerlei
Probleme gehabt.

von Karl H. (kbuchegg)


Lesenswert?

> möglich ist dass ein Programm nur
> funktioniert wenn es 4x schneller abgearbeitet

Nicht bei dem was du an Timing brauchst.
Das erledigt den Tiny quasi nebenher.

> Hast recht, mit 100nF entstörkondensator ist das
> verhalten etwas besser. (nur noch 2 - 3 Unterbrechungen)

Das macht mich stutzig.
Was ist wenn du noch nen 100nF spendierst (wie immer:
möglichst nahe ans Gehäuse vom Tiny ran).
Ich glaub eigentlich immer mehr, dass das Problem elektrischer
Natur ist. Klemm doch mal den Lautsprecher raus und eine LED
oder sowas rein. Sinn der Sache: die Störungen durch den LS
mal im Ansatz zu vermeiden und trotzdem eine Möglichkeit zu
haben eventuelle Aussetzer zu sehen.

von Hannes L. (hannes)


Lesenswert?

Der interne RC-Oszillator des Tiny12 arbeitet gut und zuverlässig. Aber
er hat eine Temperaturdrift und jedes Exemplar läuft mit einer anderen
Frequenz.

Um Letzteres zu kompensieren, misst der Hersteller jedes Exemplar aus
und ermittelt einen Korrekturwert (das "Calibrationsbyte"), den der
Hersteller dauerhaft in den Signature-Bereich des AVRs und temporär in
die letzte Flash-Zelle und in die letzte EEPROM-Zelle schreibt.

Im Flash und EEPROM geht der Wert natürlich beim ersten Löschen
verloren. Im Signature-Bereich kann der Wert aber nur von der
Programmiersoftware gelesen werden.

Um nun zu calibrieren, muss man den individuellen Wert vor dem
Programmieren ermitteln und in das Programm einbinden, welches bei
jedem Init (Reset) das Calibrationsbyte in das Calibrationsregister
OSCCAL schreibt.

All diese Informationen sind dem Datenblatt des Tiny12 und einer
AVR-AppNote (Thema Calibration von RC-Oszillatoren) entnommen und
stehen jedem Interessierten frei zur Verfügung. In dem oben geposteten
Link zu der Soundspielerei mit Tiny15 ist zu sehen,wie ich den
Oszillator calibriere. Es gibt sicher auch andere Möglichkeiten, aber
diese scheint mir recht einfach und zuverlässig zu sein. Ich hatte
damit noch nie Probleme und ich habe auch schon einige Tiny12 und
Tiny15 verbaut.

...

von Karl H. (kbuchegg)


Lesenswert?

Was du auch probieren kannst:
Den C am Reset Pin mal in der Größe verändern.
Werden die Aussetzer in ihrer zeitlichen Länge
größer (bei größerem C) bzw kleiner (bei kleinerem
C)? Wenn ja dann werden die Aussetzer durch Reset's
verursacht. Der Grund dafür ist dann praktisch immer
in der Versorgungsspannung zu suchen.

von Hannes L. (hannes)


Lesenswert?

Also den Kondensator am Reset verwende ich bei Megas und Tinys
grundsätzlich nicht. Allerdings halte ich den Reset-PullUp mit 3,3k
recht niederohmig.

...

von Karl H. (kbuchegg)


Lesenswert?

Mal ne Frage:
Was passiert eigentlich wenn ich an einen LS 5V anlege
und die dann ausschalte. So ein LS ist doch auch nur eine
Spule und sollte daher eigentlich eine Gegenspannung
aufbauen.

Oder lieg ich da falsch?

von Jadeclaw D. (jadeclaw)


Lesenswert?

Auch mal einen Versuch wert: Einen Widerstand von 20 - 50 Ohm zwischen
Lautsprecher und +5V, sowie eine Diode antiparallel
(= Sperrichtung) zum Lautsprecher schalten. Ein Lautsprecher ist auch
immer eine Induktivität und da du diesen mit einem Rechtecksignal
speist, gibt es auch entsprechende Spikes.

Gruss
Jadeclaw.

von Hannes L. (hannes)


Lesenswert?

Stimmt... - Die Lautsprecherschaltung kann Störungen auf der
Betriebsspannung verursachen. Lautsprecher mögen auch keine
Gleichspannung. Ich hänge deshalb den Lautsprecher gern über Elko an
eine Gegentaktstufe, wenn's nur Rechteck sein brauch, dann reicht dazu
ein komplementärer Emitterfolger.

...

von HagBurt (Gast)


Lesenswert?

Danke für die vielen Antworten!

Das mit dem LS ist mir jetzt auch klar geworden.....
die ganze sache über eine gegntaktstufe zu betreiben werd ich heut
abend gleich mal ausprobieren..... mein Oszi ist leider zu lahm um
solche hochfrequenten spikes zu messen......


MFG, HagBurt

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.