Doppel- Wechselblitzer Schaltung

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

Avo XO
Mini-User
Beiträge: 3
Registriert: Fr, 28.11.08, 19:55

Di, 02.12.08, 15:14

Hi,

Es würde gehen, aber du brauchst dann einen anderen µP, glaube ich.
Du könntest zwei Interrupts, die der AtTiny45 meines Erachtens nicht hat, benutzen. Zum Beispiel würde das auf jeden Fall mit dem ATmega8 laufen.
Ggf. könnte es auch mit einem Interrupt laufen, nur dann würde das andere Programm immer laufen. Oder man schreibt das 2. Programm (kein INT) in keine Do-Loop-Schleife, oder???
Sorry, ich fang damit gerade erst an.

Wählst die 2 Interrupt-Eingänge als Eingang, logischer Weise.
Programmierst dir 2 Interrupts von den beiden Eingängen und wählst deine beiden Programme in eins deiner Labels der Interrupt-Routinen.

Gruß
Avo
Andi
Super-User
Super-User
Beiträge: 63
Registriert: Fr, 19.09.08, 13:03

Di, 02.12.08, 15:22

Syntax musst nachschlagen, aber vom Prinzip:

Code: Alles auswählen

if(Eingang1 == true) {
   dann mach Code 1
}else if(Eingang2 == true){
   dann mach Code 2
}
oder mit jump oder goto, je nachdem wie des bei die heisst. So kannst beliebig viel machen.

Ist net professionell, aber funktioniert für dich sicherlich am besten.
Avo XO
Mini-User
Beiträge: 3
Registriert: Fr, 28.11.08, 19:55

Di, 02.12.08, 15:41

Du hast doch in deinem Programm auch verschiedene Waits (Zeiten, in denen der µP NICHTS macht).

Wenn Du mal schnell vom einen Prog ins andere Prog springen möchtest musst du es schon mit den Interrupts (Unterbrechungen) machen.

Beispiel: Du hast dein Programm das insgesamt ein Paar Sekunden läuft, und du schnell mal von einen ins Andere springen möchtest geht das nicht. Du musst erst einmal diese Zeit abwarten.
Aber wenns dich nicht stört....

Gruß
Avo
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Di, 02.12.08, 17:46

Ne,

meinetwegen kann das Programm auch bis zum Ende durchlaufen. Wollte das evtl mit nem TINY24 machen oder so der hat ja Scheinbar 12 I/O. Wollte dann die Programme über einen Drehstufenschalter schalten. Dann könnte ich doch quasi 6 Programme drüber schalten oder?

Gruß Wießje
Avo XO
Mini-User
Beiträge: 3
Registriert: Fr, 28.11.08, 19:55

Di, 02.12.08, 17:58

Hi,

ist das ein Schalter mit dem man die verschiedenen Anschlüsse schalte kann?
Wie kommst du auf 6 Programme?

Gruß
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Di, 02.12.08, 18:46

Ja genau jede Schaltstelle einzeln. Oh sorry, hatte vergessen, dass ich das dann auf 6 Ausgänge erweitern möchte. Aber das soll ja nicht das Problem sein.
Andi
Super-User
Super-User
Beiträge: 63
Registriert: Fr, 19.09.08, 13:03

Mi, 03.12.08, 08:26

Hi,

Avo XO ich glaube er möchte nicht unterschiedliche Programme wie Threads parallel laufen lassen, sonder, so verstehe ich das, er möchte je nach Schalterstellung die LEDs unterschiedlich blinken lassen!
Stimmt das so, Wiessje?

Falls es so ist, würde ich folgendes machen:

Code: Alles auswählen

INIT
DO 'Schleife beginnen
SELECT CASE PortAnDemDerSchalterIst
  CASE 1
      GOSUB Label-1
  CASE 2
      GOSUB Label-2
  CASE 4
      GOSUB Label-4
  .
  .  'weitere Fälle möglich je nach Schalterstellung
  .

  CASE ELSE
END SELECT
LOOP



Label-1:
    ...AnweisungFür Blinken in Schalterstellung 1
RETURN 

Label-2:
    ...AnweisungFür Blinken in Schalterstellung 2
RETURN 

Label-4:
    ...AnweisungFür Blinken in Schalterstellung 3
RETURN 

.
.
.
Du Schaust dir mit SELECT CASE den Port an, an dem die 8 geschalteten (können auch weniger) Eingänge sind.
Ist der Wert 1, so wird der Code in Label-1 ausgeführt. Ist der Wert 2, so wird der Code von Label-2 ausgeführt, usw...
Dabei ist der Wert wie folgt:

1. Eingang -> 2^0 -> 1
2. Eingang -> 2^1 -> 2,
3. Eingang -> 2^2 -> 4
4. Eingang -> 2^3 -> 8
....
8. Eingang -> 2^7 -> 128

Ist sehr übersichtlich, und auch leicht zu pflegen
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Mi, 03.12.08, 13:36

Ich seh das genauso wie Andi. Interrupts sind dafür nicht erforderlich.
Es würde allerdings auch mit dem Tiny45 gehen...
Der hat (in der angegebenen Schaltung freie) analoge Eingänge (PB3/PB4). Und der AD-Wandler ist locker genau genug um 6 unterschiedliche Zustände zu erkennen (die 5V mit 6 Widerständen per Spannungsteiler über den Stufenschalter auf z.B. 0-2.5V 'übersetzen' - geht auch noch bei 12 Stufen - hab ich bei einer anderen Gelegenheit auch schon mal gemacht). Ist also mehr oder minder 'Geschmacksache'. Wenn die 6 verschiedenen Programme allerdings 'komplexe' Blick-Folgen abbilden sollen, wirst Du mit dem (im obigen Programm verwendeten) Super-Primitiv-Algorithmus ggf. schnell am Ende des Speichers ankommen...
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Mi, 03.12.08, 20:34

Ja genau so ist das gemeint. Mit welchem µP mache ich sowas das denn am Besten. Will also 6 Kanäle machen, da ich evtl. noch lauflichter dazu machen möchte und das sieht mit zweien etwas langweilig aus :D . Und halt eben mit nem 6 Stufenschalter.

Also schaut der dann quasi erst, an welchem Eingang Spannung anliegt und Schaltet dann das zugewiesene Programm? Wie werden die Eingänge denn Bezeichnet? Dann müsste ich doch z.B. Case PB01 schreiben oder wie? Oder die zuweisungen vorher irgendwo vermerken. Kann ich dem einfach so die 5V auf den Eingang schalten oder fängt der dann an zu stinken? :D
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Do, 04.12.08, 12:05

Mit welchem µP mache ich sowas das denn am Besten
Da kann ich Dir pauschal keine Antwort geben. Wenn Deine Blick-Programme recht einfach sind und Du mit dem Speicher von 2K auskommst, reicht ein Tiny2313 (der hat schon 17 Ein-Ausgänge allerdings nur digital). Am vielseitigsten wäre wohl ein ATMega8 (immerhin 8K Speicher und reichlich Ein-Ausgänge in digital + analog). Bei allen Atmels kann man die Ein-Ausgänge per Software auswählen (also welcher Pin als Eingang oder als Ausgang dienen soll).
...Kann ich dem einfach so die 5V auf den Eingang schalten oder fängt der dann an zu stinken?
Du kannst. Allerdings ist es üblich einen Vorwiderstand (z.B. 10K) zu verwenden. Falls Du versehentlich einen Pin als Ausgang definiert hast und diesen Pin per Software auf 0 setzt (so wie im obigen Programm: Reset Kanal1), dann versucht der Chip die 5V auf 0V zu ziehen... das überlebt er nicht unbedingt. Wenn Du digitale Eingänge verwenden willst, macht man das aber üblicherweise anders: Der Chip hat interne Pull-up Widerstände (~30k). Wenn also der Pin 'floated' (nix angeschlossen), hat er quasi 5V und würde beim lesen eine 1 liefern. Wenn dieser Pin auf 0V geschaltet wird, würde er beim lesen natürlich eine 0 liefern.
Dann müsste ich doch z.B. Case PB01 schreiben
So ähnlich.
Nehmen wir mal einen Tiny2313 als Beispiel:
Pins 12 bis 17 (PB0 bis PB5) wären Deine 6 Ausgänge
Pins 2+3 und 6 bis 9 (PD0 bis PD5) wären 6 Eingänge (die per Drehschalter an 0V gehen oder offen sind).
Definieren:
Dim Schalter As Byte
DDRB = &B00111111 'PB0 bis PB5 als Ausgänge
DDRD = &B00000000 'PD0 bis PD5 als Eingänge
PORTD = &B00111111 'Pull-up für PD0 bis PD5 aktivieren

...
Schalter = &B00111111 And PIND
'Dann wie oben, allerdings invertiert:
SELECT CASE Schalter
CASE &B00111110 'Schalter in Stellung 1
GOSUB Label_1
CASE &B00111101 'Schalter in Stellung 2
GOSUB Label_2
CASE &B00111011 'Schalter in Stellung 3
...
Wie werden die Eingänge denn Bezeichnet?
Eingänge werden in BasCom mit dem PIN register bezeichnet
Also z.B. Lesen von PB1: Bit-Variable=PINB.1

Wenn Du mehr darüber wissen willst, einfach das Datenblatt des verwendeten Chips anschauen und/oder die Bascom-Doku lesen...
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Do, 04.12.08, 20:49

Man,

Das hört sich alles komliziert an. Bin eher SPS gewöhnt. Sagen wir ich nehme dann den ATMEGA 8, kann ich den mit dem Proger programmieren wenn ich da einen anderen Sockel dran löte? Und die Schaltung an sich sähe ja dann genau so aus 300hm ---> BC337 Ausgangsseitig und Eingangsseitig? Wie muss ich den denn da verschalten. Hast du zufälligerweise von dem ATMEGA 8 ein Datenblatt auf Deutsch? Habe bis jetz nur englische gefunden, werde da bei manschen sachen nicht schlau!
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Fr, 05.12.08, 10:16

...ATMEGA 8...kann ich den mit dem Proger programmieren...
Ja.
Und die Schaltung an sich sähe ja dann genau so aus 300hm ---> BC337 Ausgangsseitig
Ja.
Eingangsseitig:
Wenn Du (wie oben beschrieben) mit digitalen Eingängen arbeitest, werden die im einfachsten Fall einfach gegen Masse geschaltet. Analoge Eingänge würdest Du mit einer Spannung von 0-5V (oder 0-2.5V) beschalten und zur Strombegrenzung ggf. noch mal einen 1K Widerstand davor setzen. Die Beschaltung ist also wirklich einfach.
Datenblatt auf Deutsch? Ist mir nicht geläufig. Es gibt ein paar 'Übersichten' bei RN z.B.:
http://www.roboternetz.de/wissen/index.php/AVR
wo das wichtigste kurz erklärt ist, bei speziellen Fragen wirst Du um das Datenblatt aber wohl nicht rumkommen.
Eine gute allgemeine 'Einführung' zu den AVRs auf Deutsch gibt es auch hier: http://www.rowalt.de/mc/
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Fr, 05.12.08, 12:37

Achso, einfach nur die Masse schalten, dann gehts ja. Das mit dem Masse schalten is für mich als grober Elektriker etwas fremd aber das ist ja dann sicherlich kein Problem. Dann muss ich glaube ich nochmal bestellen, dass ich nochmal was zum basteln hab.
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Fr, 05.12.08, 17:02

...etwas fremd...

Stell es Dir mal so vor (Ersatzschaltbild - mit Transistoren hast Du ja anscheinend keine großen Schwierigkeiten):
EingansPin_Masse.png
EingansPin_Masse.png (4.97 KiB) 14439 mal betrachtet
(sehr stark vereinfacht...)

Wenn der Schalter offen ist, kriegt die Basis des Eingangs Strom über den 33K Widerstand. Der Transistor schaltet durch und am 'internen Ausgang' liegen (fast) 0V an. Wenn der Schalter geschlossen ist, wird die Basis mit 0V verbunden, der Transistor sperrt und am 'internen Ausgang' liegen 5V an.
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Fr, 05.12.08, 20:37

Ja schon klar, habs ja schon gemacht.

Habe grade mal ein Layer gemacht. Die Eingänge die mit dem Drehschalter geschaltet werden direkt gegen Masse gelegt, oder muss ich da noch einen Widerstand zwischen machen? Jetzt möchte ich aber noch einen Eingang extern geschaltet haben mit 12V. Wollte das mit nem BC337 und nem 78L05 machen, von denen Habe ich ja genug. Würde das gehn? Also quasi wie die Ausgangsschaltung.

Was mache ich denn mit diesem AREF kontakt? Muss ich den mit irgendwas beschalten oder bleibt der frei?

Habe jetzt VCC und AVCC mit 5V beschaltet und beide GND´s eben mit Masse. Muss ich sonst noch irgendwas beachten?

Des Weiteren PB6,PB7,PD5-7 und PB0 gegen Masse als Eingänge für die Programme über den Schalter. Den 12V Extern ---> 78L05 ---> 300Ohm ---> BC337 der dann die Masse auf den PC6 schaltet. Als Ausgänge PC3-5 und PB1-5 mit je 300Ohm zu einem BC337 der Masse schaltet. Funktioniert das so?

P.S. Sind jetzt 8 Aus- und 7 Eingänge. Wieder mal mehr wie anfangs gedacht.


Gruß Wiessje
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Sa, 06.12.08, 00:07

AREF bleibt frei. Sollte mit einem Kondensator gegen Masse geschaltet werden, wenn Du analoge Spannungen messen willst.
Die Eingänge die mit dem Drehschalter geschaltet werden direkt gegen Masse gelegt
Passt.
Habe jetzt VCC und AVCC mit 5V beschaltet und beide GND´s eben mit Masse.
Passt auch.
Des Weiteren PB6,PB7,PD5-7 und PB0 gegen Masse als Eingänge für die Programme über den Schalter. Den 12V Extern ---> 78L05 ---> 300Ohm ---> BC337 der dann die Masse auf den PC6 schaltet. Als Ausgänge PC3-5 und PB1-5 mit je 300Ohm zu einem BC337 der Masse schaltet. Funktioniert das so?
Ja. Wenn ich es richtig verstanden hab, dann schon. Schaltbild wäre hilfreich.
Den 12V Extern ---> 78L05 ---> 300Ohm ---> BC337 der dann die Masse auf den PC6 schaltet.
Ist ein wenig 'mit Kanonen auf Spatzen schießen' aber sollte natürlich auch gehen. Meist nimmt man hierzu nur einen Spannungsteiler. Also die 12V über zwei Widerstände (z.B. 4,7k + 2,2k) nach Masse und den Mittelpunkt zwischen den beiden Widerständen an einen Eingang des Atmels. Für speziell diesen Eingang dann KEINEN internen Pullup aktivieren. Wenn dann 12V anliegen, bleiben am 4.7k Widerstand etwa 8V hängen; am Eingang des Atmels sind es dann etwa 4V. Das reicht locker um das als logisch High zu erkennen (liefert also eine '1' beim Lesen per PIND). Wenn keine 12V anliegen, ist der Pin am Atmel über die 2.2K mit Masse verbunden was natürlich logisch Low ist (liefert also eine '0' beim Lesen per PIND).
Sind jetzt 8 Aus- und 7 Eingänge. Wieder mal mehr wie anfangs gedacht.
Ja, wenn man mal 'Lunte gerochen' hat mit den Atmels wird es schnell mehr und mehr :D...
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Sa, 06.12.08, 17:06

Ja ich hätte auch nit gedacht das man damit so schnell, kein und günstig sich lustige Sachen bauen kann.

Spannungsteiler wollte ich vermeiden, da ich das Ding mit 6-30V betreiben kann wie ich grade Lust hab und ich das Layer nicht 2seitig machen will. Der nimmt mir sonst zuviel Platz weg. Das mit dem Externen 12V eingang habe ich quasi genau so gemacht wie in der 1. Schaltung die LED Ausgänge nur halt mit dem Spannungsregler vorne dran.

Kannst du mir bei Gelegenheit nochmal ein Progamm vorschreiben? Nur wie das da mit den Ein und Ausgängen programmiert wird. Da hab ich noch nit so ganz durchgeblickt. Da wo die Programme hin kommen grade ein Platzhalter hin, die kriege ich denke ich mal noch selbst da rein. Ist nicht dringend. Denke mal der kram kommt eh erst Ende der Woche.

Gruß
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

So, 07.12.08, 00:01

Ok. Welcher Chip... Atmega?

Wenn Du mir sagst, welche Pins Ein-Ausgänge sein sollen, schreibe ich Dir den 'Rohbau' :D
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

So, 07.12.08, 11:06

Super schon mal vielen Dank im vorraus, dann kann ich ja bald Verputzen. :wink: . Also wollte das mit nem ATMEGA 8 Machen.

Eingänge:

PC6, PB6, PB7, PD5, PD6, PD7 und PB0.

Ausgänge:

PC5, PC4, PC3, PB5, PB4, PB3, PB2 und PB1.

Dann bin ich mal gespannt, ob das auch so gut klappt wie bei der ersten Schaltung.
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Mo, 08.12.08, 12:49

PC6 bitte nicht verwenden, das ist der RESET Pin. Sonst kannst Du den Chip nie wieder programmieren...
Man kann zuerst den Chip programmieren und danach den RESET Pin per Fuse als Eingang konfigurieren. Aber wenn ein Fehler im Programm war, war's das. Weil dann hilft nur noch ein 'Hochspannungs-Programmer'. Die sind aber wesentlich aufwändiger als der Simple-Programmer aus diesem Thread...
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Mo, 08.12.08, 19:23

dann nehmen wir dafür dann den PD0, wenn das Funktioniert
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Di, 09.12.08, 13:41

Na klar, außer Du willst auch noch die serielle Schnittstelle zum PC nutzen - dazu wäre aber noch ein Pegelwandler wie ein Max232 erforderlich ;)
Anbei ein Beispielprogramm. Ich hab mir erlaubt, die Ausgänge zu einem virtuellen Port zusammenzufassen. Das vereinfacht die Programmierung von Lauflicht etc.
Dateianhänge
Test_Mega8_Blinker.zip
(1.24 KiB) 271-mal heruntergeladen
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Di, 09.12.08, 15:23

Perfekt! Danke!

Was würde denn nun passieren, wenn ich 2Programme gleichzeitig laufen lassen wollte? würde das funktionieren?
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Di, 09.12.08, 17:24

Wie meinst Du das? 'Gleichzeitig' kann der Prozessor nicht. Der arbeitet linear Befehl für Befehl ab. Man kann natürlich so eine Art Multitasking erreichen, wenn man z.B. einen Timer und Interrupts verwendet, oder wie weiter oben schon mal angesprochen, einen Schalter auf einen Interrupt legt. Aber was Du damit erreichen willst ist mir noch nicht klar.
Wiessje
Super-User
Super-User
Beiträge: 61
Registriert: Mo, 10.11.08, 21:33

Di, 09.12.08, 18:06

Also, ich habe ja jetzt einen 6 Stufen Drehschalter für 6 Eingänge mit dem 6 Programme (Lauflichter etc.) mit 6Ausgängen geschaltet werden . Nun will ich jedoch mit einem Kippschalter Ein/Aus ein 2. Programm (z.B. Wechselbilker o.ä) parallel laufen lassen mit dem ich unabhängig die 2 verbleibenden Ausgänge ansteuere.
Antworten