Hi,
habt ihr Erfahrung oder Vorschläge zu folgendem Problemchen:
ich benutze einen ATTiny45 um ein Funksignal empfangen.
Das Funksignal wird über einen Schmitt aufbereitet und an INT0 angelegt,
bei jedem INT0 prüft meine Empfangsroutine ob das Bit-Timing stimmt und
speichert es ggf. ab oder resettet den Eingangspuffer.
Ziel ist es eine definierte Präambel zu empfangen und dann weiter zu
machen.
Nun ist es so, dass an dem INT0 ständig Signale kommen vom üblichen
Grundrauschen des Funksignals.
Das hat nun allerdings zur Folge, dass ich zum Programmieren des ATTiny
das Signal nicht anliegen lassen kann, weil es sonst dazwischenfunkt und
die Programmierung nicht klappt (INT0 = SCK des SPI ports), ich muss
also auf dem Breadboard immer das Kabelchen abziehen.
Erstens nervt das und zweitens kann ich so keine Produktionsschaltung
auf echter Platine draus machen, also suche ich nach einer eleganten
Lösung wie ich das Signal am INT0 stoppen kann für die Zeit des
Programmierens.
Ich hätte so Ideen wie:
Eine NE555 Timerschaltung wird vom RESET-Signal ausgelöst und fängt z.B.
über einen Transistor das Signal am INT0 ab.
Oder der Schmitt wird über den NE555 mit Strom versorgt und dann
abgeschaltet, wenn die RESET line den NE555 Timer triggert.
Oder dasselbe statt Timer mit Flipflop und der ATTiny schaltet quasi den
Funkempfang aktiv ein.
Ich gehe dabei davon aus, dass das RESET Pin nur kurz gesetzt wird und
nicht während des gesamten Programmiervorgangs an bleibt. Sonst wäre es
ja etwas einfacher als Timer oder Flipflop.
Da mir das obige aber alles etwas aufwändig vorkommt ... geht's
einfacher, eleganter?
VG,
Konrad
Konrad G. schrieb:> Ich gehe dabei davon aus, dass das RESET Pin nur kurz gesetzt wird und> nicht während des gesamten Programmiervorgangs an bleibt.
Doch, das ist so.
Der Programmer zieht RESET auf Low.
Dann programmiert er.
Und wenn er fertig ist, gibt er den RESET wieder frei und der
eigentliche µC läuft wieder an.
Kannst du natürlich ausnutzen :-)
Ha! Danke! Das ist schon mal cool.
Trotzdem ... was mach ich dann am elegantesten?
Wie kann ich mit meinem RESET Signal am einfachsten und solidesten den
Schmitt
(Texas Instruments SN 74 HC 14 N) ausser Gefecht setzen?
Das RESET mit auf's Eingangssignal beim Schmitt schalten oder sowas
ähnliches?
Oder brauch ich einen NAND/Komparator dazwischen?
Wie man merkt bin ich noch nicht ganz sattelfest in der Elektronik ...
gefährliches Halbwissen sozusagen.
VG,
Konrad
So, heftig nachgedacht, das wär jetzt mein Konzept mit der Bitte um
Kommentare.
Ein NPN-Transistor hängt über einen 10k Vorwiderstand am RESET Pin, der
Emitter ist mit GND verbunden, der Kollektor an GND des Schmitt Trigger
IC und über einen 2,2k Widerstand mit VCC. VCC des Schmitt an VCC.
Das soll nun funktionieren wie folgt:
1. RESET Pin auf HIGH (Normalzustand)
- Transistor leitend, Kollektor-Emitter-Widerstand = Null, die gesamte
Spannung fällt am R2 ab, der Schmitt wird mit Spannung/Strom versorgt.
2. RESET Pin auf LOW (Programmierung)
- Transistor sperrt, CE-Widerstand = unendlich, die gesamte Spannung
fällt am Transistor ab, keine Spannung an R2, Schmitt wird nicht mit
Spannung versorgt.
Infolgedessen kommt während RESET am Pin INT0 = SCK des ATTiny kein
Funksignal mehr an und der ISP kann in Frieden programmieren.
Mir fällt nur gerade auf, dass der R2 evtl. höher sein könnte (10k? oder
100k?), sonst fliesst dort zuviel Strom, gehe davon aus, dass der
Schmitt wenig Strom braucht (ah ja, 20 uA) also vergleichsweise recht
"hochohmig" ist ggü den R2.
Was haltet ihr davon?
Als Transistor den BC547B? Hab ich als kleinsten grad da, der bräuchte
wohl nicht viel Verstärkung und nicht viel Kollektorstrom. Was würdet
ihr nehmen?
VG,
Konrad
Das geht so nicht, der HC14 kann kein Tristate.
Schalte einfach 4,7k in Reihe zum HC14 Ausgang.
Der Programmer überschreibt dann das Signal am 4,7k.
Peter
Hallo Peter,
danke. So einfach, einfach einen Widerstand!? Genau sowas hab ich
gesucht.
Tristate: das stimmt, das kann der Schmitt nicht, so hatte ich das auch
nicht gedacht. Ich wollte ihm einfach mit dem Transistor den Strom
abdrehen, d.h. wenn RESET auf LOW geht sperrt der Transistor und der
Schmitt bekommt keine Versorgungsspannung mehr.
Geht das nicht?
Du meintest den Ausgang des Schmitt via Tristate "busfähig" machen,
oder?
Hab das mit dem Transistor heut Nacht auch noch kurz ausprobiert, ging
erstmal nicht.
Meine Schaltung hatte noch einen Fehler, das RESET Pin soll lt. Atmel
Application Notice einen Pullup bekommen.
Danach ging es noch nicht und zwar deshalb, weil die Spannung des
Schmitt nur auf um die 3,x V gezogen wurde. Nach Verkleinerung des
Vorwiderstands gings, aber unzuverlässig - mal schon, mal nicht.
Niedrigste Spannung am Schmitt Trigger IC 2,xV, aber nicht immer
komischerweise.
Wenn allerdings ein Widerstand reicht, dann kann ich mir das alles
sparen.
Trotzdem interessiert es mich, wie es mit dem Transistor richtig geht.
VG,
Konrad
... nur zum Verständnis: ich könnte statt dem Widerstand auch einen
Tristate-Buffer zwischenschalten oder, genau dafür sind die da?
Damit wäre die Lösung mit dem Widerstand die einfachstmögliche
"elektrische" Lösung, der Tristate-Buffer die digitalelektronische und
meine Transistorlösung ein "Hack"? :-)
VG,
Konrad
Konrad G. schrieb:> meine Transistorlösung ein "Hack"? :-)
Hallo!
Eher wohl Dreck statt Hack! Man macht ein IC nicht unsichtbar, indem man
ihm seine Betriebsspannung klaut - schon gar nicht über GND. Je nach
Innenschaltung führt das zu ungeahnten Effekten.
Hallo route_66,
ich stimme zu, das kam mir auch schon recht "unkonventionell" vor.
Wusste mir aber erstmal nicht besser zu helfen.
Ich habe inzwischen auch weiterrecherchiert und verstanden, dass die
richtige Lösung wohl sowas wäre:
http://www.klaus-leidinger.de/mp/index.html
Also einen Switch IC mit dem ich generell die Pins des Programmers
ab-/anklemme. Wenn ich richtig denke kann ich das auch automatisch auf
Basis des RESET Signals machen, wenn das kommt schalte ich zum
Programmer.
Dann noch die abschliessende Frage in die Runde: könnte ich ebenso mit
einem Tristate Buffer machen oder muss es ein Switcher sein?
VG,
Konrad