PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : realiskarte ***updated*** #bitte reischauen#



tzlo
14.01.2008, 07:01
Hi,

ich brauch für meinen rooter eine 20fach realiskarte ür den seriellen oder paralellen port! SIe sollte unter windoof XP oder 2000 funzen und ich sollte die oberfläche in basic (VB.NET) coden können!

Hat jeman zufällig nen schaltblan für nen realiskarte mit 20 realis?

chr-mt
14.01.2008, 07:09
Hi,
Schaltplan habe ich jetzt nicht parat.
Ich würde das so machen:
Serielle Schnittstelle über einen Max 232 an einen Atmel Mega 32. (16er geht natürlich auch)
Der schaltet dann über 3* ULN 2003 die 20 Relais.
Wären auch noch genug Pins frei, um ein LCD -Display etc. dranzuhängen ;)

Kannst dir bei Conrad mal die 8-fach serielle Karte ansehen.
Da gibt es auch einen Schaltplan dazu.
Ist im Prinzip das gleich, nur mit einem anderen Controller und weniger Relais.

Gruß
Christopher

tzlo
14.01.2008, 13:04
naja, ich wollte jetzt nicht speziell mit microcontrollern arbeiten!

Geht das, wenn ich an mein lapp 2x soeinen usb--->paralell wandler nehme und aus pollin.de In Fundgrube > Bausätze soeine parralel karte nehmen und die beide an die wandler hänge??? Weil im programm von der karte kann man 3 verschidene ports aufwählen!

tzlo
14.01.2008, 19:22
*****push*****!!!

tzlo
15.01.2008, 05:43
keiner????????????????????????????????????


Ich muss wissen, ob sich zwei usb------>lpt wandler vertragen, und ob windoof xP das mitmacht!!!!!!!!!

Jaecko
15.01.2008, 06:49
USB-LPT-Wandler dürften nicht funktionieren. Hab so einen, der is eigentlich nur Grütze. Ok, zum Drucken an nem Drucker (!) isser ok, aber für Schaltaufgaben gehts nicht, da die USB-Teile keine direkte Adresse (z.B. &H378) kriegen... Darum liegt er jetzt rum und verstaubt, da ich den auch für sowas verwenden wollte.

Falls es beim Laptop unbedingt ein LPT-Port sein muss, gibts Port-Replikatoren bzw. PCMCIA-Karten.

Das (preislich) billigste wäre aber immer nochn ATMega per RS232 angesteuert. Da wärs dann auch Betriebssystemunabhängig.
Da isses dann sch*egal ob XP, Win98, DOS6.22, Linux oder ein anderer ATMega.

chr-mt
15.01.2008, 06:59
Hi,
das kommt darauf an.
USB nach Parallel Wandler sind normalerweise nur für Drucker geeignet.
Mit anderer Hardware kann es da schon mal Probleme geben.
Müsstest du ausprobieren.

Du kannst aber auch die seriellen Karten nehmen..
USB nachSeriell Wandler sind normalerweise unproblematischer.


naja, ich wollte jetzt nicht speziell mit microcontrollern arbeiten!
Daran kommst du aber normalerweise nicht vorbei, wenn du so viele Relais schalten willst.
Es sei denn, du machst eine Lösung, wie von dir vorgeschlagen.
Wie gesagt, das musst du aber ausprobieren, ob es klappt.
Zu Not kannst du vor deine 3 parallelen Karten auch noch einen Mikrocontroller hängen und den mit einem seriellen Port ansteuern.
Diese Karten haben meistens die, von mir erwähnten, ULN Treiber etc. drauf.
Du bräuchtest dann außer dem Mikrocontroller nur noch einen Max232 und ein paar Kondensatoren, einen Quarz und einen Widerstand und ein Stückchen Lochrasterplatine um die 3 Karten anzusteuern. Eventuell noch einen 5V Spannungsregler.
Alles nicht besonders aufwändig.
Die Programmierung in VB und auf Mikrocontrollerseite in Bascom,
ist recht einfach zu realisieren.

Knnst vor deine 3 parallelen Relaiskarten natürlich auch ein fertiges Board setzen, das mindestens 20 Ausgänge hat...
Damit hast du dann am wenigsten Arbeit.
Musst dann nur noch die Verindungen untereinander herstellen und die Software schreiben.



Gruß
Christopher

python_rocks
15.01.2008, 07:16
Ich muss wissen, ob sich zwei usb------>lpt wandler vertragen, und ob windoof xP das mitmacht!
Hallo tzlo!

Irgendwie verstehe ich dich nicht.

Du hast als Avatarbild sogar einen Mikrocontroller drinnen und willst trotzdem die Relais nicht über den µC schalten?

Es gibt kaum eine einfachere Aufgabe für so einen Mikrocontroller als diesem per RS232 oder USB die Anweisungen zum Schalten von Relais zu übermitteln.

Und es gibt kaum etwas mit weniger Zukunft als etwas mit dem Parallelport schalten zu wollen. Seit Windows 2000 verhindert Windows mehr oder weniger den direkten Zugriff auf den Parallelport. Sogar unter Linux muss man oft erst ein Kernelmodul (lp) entladen, bevor man direkt auf den Parallelport zugreifen kann.

Jedes Testboard mit einem ATMega drauf, hat auch einen RS232-Konverter mit drauf. Und damit hast du schon alles was du brauchst. Für jedes Relais noch einen Widerstand, einen Transistor und eine Diode und fertig.

Genug geschwafelt... :-#

mfg
Gerold
:-)

tzlo
15.01.2008, 11:13
es sind die lpt realiskarten mit ja 8 ausgängen von pollin!!!!


gibt es für den pcmcia schacht ne karte mit 2x lpt?

tzlo
16.01.2008, 19:34
dann brauche ich aber einen atmega 128, wegen der i/o's

oder kann ich nen tatatursystem nehmen:


1 2 3 4 5
1---x----x----x----x----x
2---x----x----x----x----x
3---x----x----x----x----x
4---x----x----x----x----x
5---x----x----x----x----x

TheHawk
16.01.2008, 20:06
Wieso? Ein ATMega16/ATMega32 hat ja 32 I/O's. Zwei davon brauchst du für RS232, d.h. bleiben 30 I/O's

python_rocks
16.01.2008, 20:16
dann brauche ich aber einen atmega 128, wegen der i/o's
Hallo tzlo!

Mit dem ATmega8 kannst du (wenn du RS232 anschließt) 17 Relais schalten. Wenn du auf MOSI, MISO und SCK verzichtest -- also den ATmega8 zum Programmieren von der Schaltung trennst -- dann kannst du 20 Relais schalten.

Und der ATmega16 ist der nächst größere µC. Damit kannst du 27 Relais normal und 30 Relais schalten, wenn du die Pins für MOSI, MISO und SCK ebenfalls verwendest.

mfg
Gerold
:-)

izaseba
16.01.2008, 20:44
Warum soll er auf Miso/Mosi/sck verzichten ?
die Relais muß er eh über Transistoren oder ULNs treiben, von da aus werden sie wohl das Programmieren nicht beeinflussen.
und wenn ich persönlich zwischen einem "kleinem" M8 und einem M16 wählen müßte würde ich eher den M8 nehmen...

Aber verstehen kann ich ihm auch.
Wenn er sonst nichts mit µC am Hut hat und nur diese eine Anwendung braucht, will er sich den Streß mit der Programmiererei vielleicht nicht antun...

Schon alleine einen Programmer besorgen wenn man nur USB zu verfügung hat, ist so eine Sache.

Alternativ könnte er ganz nett anfragen, ob jemand einen µC für Ihn brennen könnte, da dürfte wohl der eine oder andere helfen, oder ?

Gruß Sebastian

python_rocks
16.01.2008, 21:12
von da aus werden sie wohl das Programmieren nicht beeinflussen
Hallo Sebastian!

Aber die Relais würden beim Programmieren wie wild rattern und könnten Störungen erzeugen. ;-)

@tzlo: Vielleicht hast du Glück und ich schreibe gerade so ein Programm für den Atmega8. (RS232 und 17 Relais) ;-) Und da du einen Atmega8 als Avatarbild hast, gehe ich davon aus, dass du dieses Ding mit einem fertigen Programm füttern kannst.

mfg
Gerold
:-)

izaseba
16.01.2008, 21:41
Aber die Relais würden beim Programmieren wie wild rattern und könnten Störungen erzeugen
Das glaub noch nicht mal, aber einigen wir uns einfach mal auf einen Jumper in der Spannungsversorgung zu den Relais hin ;-)

Der tzlo müßte sich nur einig sein, wie das Protokoll aussehen soll z.B. per UART

Relais 1 an
Relais 2 aus

und da er in VB programmieren will, könnte er das Ding selbst in Bascom machen, aber wenn Du sowieso so was schreibst ;-)

Gruß Sebastian

Besserwessi
16.01.2008, 21:48
Wenn man einen Echten LPT Port hat, könnte man 2 Schieberegister (74HC595) anschlißen um so über 3 Pins 16 relais zu steuern. Je nach Relaistyp wahrscheinlich noch ULN2803 dazu.
Über die USB-LPT Wandler wird das wohl nichts, schließlich gehen die ISP dougles ja auch nicht.

Ceos
16.01.2008, 22:15
da muss ich mich reindrängeln, ich hab hier atm auch so n problem ... ich hab nur n laptop und nur USB und 2 atmega162 die ich proggen müsste so mit ISP und so ... gibts da überhaupt ne lösung für ? wenn ja bitte link, ich brauch das so schnell wie möglich (link zum thema https://www.roboternetz.de/phpBB2/viewtopic.php?t=37307)

izaseba
16.01.2008, 22:25
gibts da überhaupt ne lösung für ?
Es wäre doch schlimm wenn es keine gäbe oder ?
Meine Vorschläge:

AVRISP mkII
AVR Dragon
STK500 + USB<->rs232 Wandler
JTAGICE mkII

Gruß Sebastian

Ceos
16.01.2008, 22:34
also AVRISP mkII und JTAGICE mkII liegen preislich ja jenseits von gut und böse ... für AVR Dragon und STK500 + USB<->rs232 Wandler konnte ich auf die schnelle keine preise finden ....

izaseba
16.01.2008, 22:44
Wenn der AVRISP mkII zu teuer ist, dann brauchst Du auch nicht nach den anderen Preisen schauen...

Hmm, sonst gibt es noch ein paar selbstbau Projekte, das Problem dabei ist,
sie beinhalten einen µC, der wiederum zuerst programmiert werden will ;-)

Was ist jetzt mit den Megas ?
Willst Du sie nur einmal programmieren und das wars, oder mußt Du irgendwas entwickeln wo Du einen Programmer zwingend benötigst ?

Wenn sie nur einmal für irgendwas mit fertigem Programm bespielt werden müssen, findest Du vielleicht jemanden, der in der nähe wohnt und das für Dich erledigt ?

Gruß Sebastian

Ceos
16.01.2008, 22:49
ehrlich gesagt bin ich grad auf nen billigen Dragon gestossen ... der trug aber net die bezeichnung mkII hat aber USB ... *grübel* geht der auch ? ich müsste den schon öfters umprogrammieren ... also ja cih brauch ihn eighentlich schon

izaseba
16.01.2008, 23:10
Biligen Dragon ?
Der kostet glaub ich so um die 60-70 € neu
Den kann ich ruhig empfehlen, der Hat alles was man eigentlich braucht
ISP/HV/JTAG/DW,geiles Teil

Gruß Sebastian

P.S. Der Dragon trägt auch nicht die mkII Bezeichnung
Das ist Er (http://www.mercateo.com/p/115-644973/ATAVRDRAGON_Mikrocontroller_Entwicklungski.html)

Ceos
16.01.2008, 23:15
Bingo das ist er, danke damit verabschiede ich mich aus diesem topic auch direkt ... wenn dann meld schau mal in meinem topic vorbei, vll. hab ich ja noch paar fragen ^^

elmar69
17.01.2008, 10:09
der Hat alles was man eigentlich braucht
ISP/HV/JTAG/DW

Man muss nur daran denken, was der Dragon im Standard-Lieferumfang nicht hat:

USB-Anschlusskabel, ISP-Programmierkabel, der HV-Programmierport und der Prototypen-Bereich sind leider unbestückt, da gehören noch Stiftleisten und ein gescheiter Nullkraft-Sockel rein. Die in der Anleitung erwähnten Verbindungskabel zur konfiguration des Prototypen-Bereichs liegen sind auch nicht dabei.

python_rocks
17.01.2008, 13:15
Vielleicht hast du Glück und ich schreibe gerade so ein Programm für den Atmega8.
Hallo Leute!

Das Programm ist fertig. Nur testen muss man es noch. Ich bitte um Kritik.

http://paste.pocoo.org/show/21844/

mfg
Gerold
:-)

python_rocks
17.01.2008, 13:22
Update: http://paste.pocoo.org/show/21845/

python_rocks
17.01.2008, 13:28
Hallo!

Und so würde der Code für 20 Ausgänge aussehen:

http://paste.pocoo.org/show/21848/

mfg
Gerold
:-)

tzlo
17.01.2008, 13:39
boah, thxx

das ist ja geil:
Es sind mehrere Arten von Kommandos möglich:
'
' - "011" = Kommando um einen einzelnen Kanal zu stellen
' - Die ersten zwei Zeichen kennzeichnen den Kanal
' - Das dritte Zeichen (0 oder 1) steht für den einzustellenden Zustand
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der BEFEHL wird mit RETURN (``chr(13)``) abgeschlossen
'
' - "ALL00000000000000000" = Kommando um alle Kanäle auf einmal zu stellen
' - ALL kennzeichnet den Befehl
' - Die restlichen 17 Zeichen (0 oder 1) stehen für den Zustand jedes
' einzelnen Kanals.
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der BEFEHL wird mit RETURN (``chr(13)``) abgeschlossen
'
' - "STATUS" = Kommando um den aktuellen Zustand der Kanäle abzufragen
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der BEFEHL wird mit RETURN (``chr(13)``) abgeschlossen
' - Rückgabe: "STATUS:<je ein 0 oder 1 für jeden Kanal>" (links beginnend)
'
' - "RESET_COMMAND" = Setzt den Kommandostring auf "" zurück
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der BEFEHL wird mit RETURN (``chr(13)``) abgeschlossen


das mit ALL und 17x 1/0 finde ich echt super!!!!!!


ja, lol, der ist super, darf ich den auf meine website setzen, mit na verinkung zu deinem profil

python_rocks
17.01.2008, 13:53
Hallo!

Update für 17-Ausgänge: http://paste.pocoo.org/show/21858/
Update für 20-Ausgänge: http://paste.pocoo.org/show/21859/

Jetzt muss ich aber Schluss machen. ;-)

python_rocks
17.01.2008, 13:55
ja, lol, der ist super, darf ich den auf meine website setzen, mit na verinkung zu deinem profil
Hallo tzlo!

Gerne! Aber warte bitte noch die Codekritik der Profis ab.

mfg
Gerold
:-)

tzlo
17.01.2008, 14:17
Ist der Code von [glow=red:58b4a2ae18]python_rocks[/glow:58b4a2ae18] so richtig???



'================================================= =======================
' Relais mit dem ATmega8 schalten. Die Steuerung läuft mit Kommandos
' über eine RS232-Verbindung.
'
' Es sind mehrere Arten von Kommandos möglich:
'
' - "011" = Kommando um einen einzelnen Kanal zu stellen
' - Die ersten zwei Zeichen kennzeichnen den Kanal
' - Das dritte Zeichen (0 oder 1) steht für den einzustellenden Zustand
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der Befehl wird mit RETURN (``chr(13)``) abgeschlossen
'
' - "ALL00000000000000000000" = Kommando um alle Kanäle auf einmal zu stellen
' - ALL kennzeichnet den Befehl
' - Die restlichen 20 Zeichen (0 oder 1) stehen für den Zustand jedes
' einzelnen Kanals.
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der Befehl wird mit RETURN (``chr(13)``) abgeschlossen
'
' - "STATUS" = Kommando um den aktuellen Zustand der Kanäle abzufragen
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der Befehl wird mit RETURN (``chr(13)``) abgeschlossen
' - Rückgabe: "STATUS:<je ein 0 oder 1 für jeden Kanal>" (links beginnend)
'
' - "RESET_COMMAND" = Setzt den Kommandostring auf "" zurück
' - Ein ZEILENUMBRUCH (``chr(10)``) wird herausgefiltert und hat keine Auswirkungen
' - Der Befehl wird mit RETURN (``chr(13)``) abgeschlossen
'================================================= =======================
$regfile = "M8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
$baud = 9600

'Anschlüsse nach Pin-Reihenfolge (1-28)
Channel_01 Alias Portd.2
Channel_02 Alias Portd.3
Channel_03 Alias Portd.4
Channel_04 Alias Portb.6
Channel_05 Alias Portb.7
Channel_06 Alias Portd.5
Channel_07 Alias Portd.6
Channel_08 Alias Portd.7
Channel_09 Alias Portb.0
Channel_10 Alias Portb.1
Channel_11 Alias Portb.2

Channel_12 Alias Portb.3 'SPI
Channel_13 Alias Portb.4 'SPI
Channel_14 Alias Portb.5 'SPI

Channel_15 Alias Portc.0
Channel_16 Alias Portc.1
Channel_17 Alias Portc.2
Channel_18 Alias Portc.3
Channel_19 Alias Portc.4
Channel_20 Alias Portc.5

Config Channel_01 = Output
Config Channel_02 = Output
Config Channel_03 = Output
Config Channel_04 = Output
Config Channel_05 = Output
Config Channel_06 = Output
Config Channel_07 = Output
Config Channel_08 = Output
Config Channel_09 = Output
Config Channel_10 = Output
Config Channel_11 = Output
Config Channel_12 = Output
Config Channel_13 = Output
Config Channel_14 = Output
Config Channel_15 = Output
Config Channel_16 = Output
Config Channel_17 = Output
Config Channel_18 = Output
Config Channel_19 = Output
Config Channel_20 = Output

'die maximale Kommandolänge muss exakt ANZAHL_KANÄLE + 3 sein
Const Max_command_lenght = 23

Dim Command As String * Max_command_lenght
Dim Command_byte(max_command_lenght) As Byte At Command Overlay
Dim Do_command As Bit
Dim Channel_string As String * 2
Dim Channel As Byte
Dim Value_string As String * 1
Dim Value_bit As Bit
Dim Bt As Byte
Dim Cnt As Byte
Dim Key As Byte
Dim Error As Bit

'Vor dem Aufruf der Prozedur *Set_channel_value* muss Channel und Value_string gesetzt werden
Declare Sub Set_channel_value()
Declare Sub Reset_command()
Declare Sub Print_status()

Config Serialin = Buffered , Size = 20
Enable Interrupts


Print "STATUS: START"


'Main-Loop
Do

'Kommando empfangen und vorbereiten
If Ischarwaiting() = 1 Then
Key = Waitkey()
'Zeilenumbruch herausfiltern
If Key <> Chr(10) Then
'Ein RETURN schließt das Kommando ab
If Key = Chr(13) Then
'Das Kommando ist fertiggestellt
Do_command = 1
Print "COMMAND: " ; Command
Else
'Kommando ergänzen
Incr Cnt
If Cnt > Max_command_lenght Then
Call Reset_command()
Print "ERROR: COMMAND TO LONG"
Else
Command_byte(cnt) = Key
End If
End If
End If
End If

'Kommando umsetzen
If Do_command = 1 Then
If Left(command , 6) = "STATUS" Then
'pass
Elseif Left(command , 13) = "RESET_COMMAND" Then
'pass
Elseif Left(command , 3) = "ALL" Then
If Len(command) = Max_command_lenght Then
For Bt = 4 To Max_command_lenght
Channel = Bt - 3
Value_string = Mid(command , Bt , 1)
Call Set_channel_value()
If Error = 1 Then
Print "ERROR: COMMAND INTERRUPTED"
Exit For
End If
Next Bt
Else
Print "ERROR: " ; Max_command_lenght ; " CHARACTERS EXPECTED"
End If
Elseif Len(command) = 3 Then
Channel_string = Mid(command , 1 , 2)
Channel = Val(channel_string)
Value_string = Mid(command , 3 , 1)
Call Set_channel_value()
Else
Print "ERROR: UNKNOWN COMMAND"
End If

'Kommando zurück setzen
Call Reset_command()

'Status zurück geben
Call Print_status()
End If

Loop
End


Sub Set_channel_value()

If Value_string = "1" Then
Value_bit = 1
Else
Value_bit = 0
End If

Select Case Channel
Case 1
Channel_01 = Value_bit
Case 2
Channel_02 = Value_bit
Case 3
Channel_03 = Value_bit
Case 4
Channel_04 = Value_bit
Case 5
Channel_05 = Value_bit
Case 6
Channel_06 = Value_bit
Case 7
Channel_07 = Value_bit
Case 8
Channel_08 = Value_bit
Case 9
Channel_09 = Value_bit
Case 10
Channel_10 = Value_bit
Case 11
Channel_11 = Value_bit
Case 12
Channel_12 = Value_bit
Case 13
Channel_13 = Value_bit
Case 14
Channel_14 = Value_bit
Case 15
Channel_15 = Value_bit
Case 16
Channel_16 = Value_bit
Case 17
Channel_17 = Value_bit
Case 18
Channel_18 = Value_bit
Case 19
Channel_19 = Value_bit
Case 20
Channel_20 = Value_bit
Case Else
Print "ERROR: UNSUPPORTED CHANNEL"
Error = 1
End Select

End Sub


Sub Reset_command()
Command = String(max_command_lenght , 0)
Cnt = 0
Error = 0
Do_command = 0
End Sub


Sub Print_status()
Print "STATUS: " ; _
Channel_01 ; _
Channel_02 ; _
Channel_03 ; _
Channel_04 ; _
Channel_05 ; _
Channel_06 ; _
Channel_07 ; _
Channel_08 ; _
Channel_09 ; _
Channel_10 ; _
Channel_11 ; _
Channel_12 ; _
Channel_13 ; _
Channel_14 ; _
Channel_15 ; _
Channel_16 ; _
Channel_17 ; _
Channel_18 ; _
Channel_19 ; _
Channel_20
End Sub



Wenn ich diesen code atmega 32 oder 16 compatible machen will, muss ich doch nur oben den code in diesen ändern, oder??????




$regfile = "M32def.dat"
$crystal = 16000000


oder ist 16 mhz nicht so gut für serial communication, sollte doch 14,*** sein, nich war?[/code]

python_rocks
17.01.2008, 14:45
$regfile = "M32def.dat"
$crystal = 16000000
oder ist 16 mhz nicht so gut für serial communication, sollte doch 14,*** sein, nich war?[/code]
Hallo tzlo!

Der ATmega16 und der ATmega32 haben beide einen 8 Mhz-RC-Oscillator eingebaut. Bei 8 Mhz und 9600 Baud hast du eine Fehlerrate von 0,16 %. Weniger als ein Prozent bei großen Frequenzen wie z.B. 8 Mhz ist OK. Siehe Seite 27 in der ATmega32-Dokumentation.

Auf den Seiten 163 bis 166 ist eine Tabelle mit Frequenzen und Baudraten.

mfg
Gerold
:-)

tzlo
17.01.2008, 14:54
aber ich will nen externen quarz, der interne ist doch nicht so genau

python_rocks
17.01.2008, 15:08
Hallo tzlo!

aber ich will nen externen quarz, der interne ist doch nicht so genau
Aber was bringt dir der genaue Quarz, wenn du mit dem Ding nur Relais schaltest? Für 9600 Baud genügt der interne RC-Oscillator.

Bei 9600 Baud werden die Sekunde 960 Byte übertragen. Wenn du keine Statusmeldungen an den Computer zurück gibst, dann könntest du damit (geschätzt) 48 mal die Sekunde alle Relais ein- oder ausschalten. Damit ist das Relais die Bremse und nicht die Datenübertragung.

Aber du könntest bei 8 Mhz statt 9600 Baud auch locker noch mit 19200 oder 38400 Baud raus fahren. Ich dachte nur, dass es nicht notwendig sei, die Daten so schnell zu übertragen. Bei langsameren Verbindungen kann das Kabel auch länger sein.



Wenn ich diesen code atmega 32 oder 16 compatible machen will, muss ich doch nur oben den code in diesen ändern, oder?
Du musst natürlich auch die Ports und die zugehörigen Kanäle anpassen/erweitern. Und überall im Code, in dem direkt auf die Ports zugegriffen wird (Channel_01, channel_02,...) musst du auch daran denken, dass du mehr Kanäle hast. Den Code musst du also einfach nur erweitern. Ansonsten fällt mir nichts ein, was du berücksichtigen musst.

mfg
Gerold
:-)

tzlo
17.01.2008, 16:46
okay, vielen Dank für eure hilfe, ganz besonders phyton_rocks wg. dem code und der andern hilfe.....

tzlo
18.01.2008, 20:08
so, hat schon wer den code getestet oder so??


gibt es eigentlich nen atmega simulator?

python_rocks
18.01.2008, 20:34
so, hat schon wer den code getestet oder so??
gibt es eigentlich nen atmega simulator?
Hallo tzlo!

Mit Bascom kannst du Simulationen durchführen. Und so einfachen Code wie diesen schluckt es leicht. Du kannst dann direkt in Bascom etwas ins Terminal-Fenster eingeben und auf die Reaktion warten.

Dieser Code:
Für 17-Ausgänge: http://paste.pocoo.org/show/21858/
Für 20-Ausgänge: http://paste.pocoo.org/show/21859/

Wurde von mir unter Bascom getestet. Weiters habe ich die Programme auf den ATmega8 meines Testboards überspielt und damit getestet.

http://www.rowalt.de/mc/avr/avrbuch/board.jpg

Die LEDs kann ich damit gezielt ein- und ausschalten. Dass es dann auch mit Relais geht, nehme ich stark an. O:)

Die STATUS-Rückmeldungen geben außerdem immer den echten Status der Ausgänge zurück.

Statt der LED brauchst du für jeden Ausgang nur je einen 10k Widerstand, einen Transistor (z.B. 2N2222), eine Diode (z.B. 1N4148 oder 1N4001) und ein Relais.

mfg
Gerold
:-)

python_rocks
18.01.2008, 21:10
Hallo tzlo!

Ich habe das Programm getestet.

http://halvar.at/krimskrams/relais_testaufbau_klein.jpg

Video: http://halvar.at/krimskrams/relais_beim_schalten.avi

Python Testprogramm: http://paste.pocoo.org/show/22172/

EDIT:

Mögliche Schaltung:

http://halvar.at/krimskrams/relais_mit_mikrocontroller_schalten_v01.gif

mfg
Gerold
:-)

EDIT2: Link zu verbessertem Testprogramm hinzugefügt

tzlo
19.01.2008, 05:06
super! *freu* aber das ist ja ziemlicher aufwand, wenn ich immer eine platine für jedes realis brauche, bw. eine "monster platine" für alle 20 stk.^^

tzlo
19.01.2008, 12:29
der code ist doch in bascom, weil du hast ja als nickname phython, aber die ist ja eh nicht fürn avr

izaseba
19.01.2008, 14:56
ich brauch für meinen rooter eine 20fach realiskarte


aber das ist ja ziemlicher aufwand, wenn ich immer eine platine für jedes realis brauche, bw. eine "monster platine" für alle 20 stk.

Das soll noch einer verstehen #-o

tzlo
19.01.2008, 16:14
ich brauch für meinen rooter eine 20fach realiskarte


aber das ist ja ziemlicher aufwand, wenn ich immer eine platine für jedes realis brauche, bw. eine "monster platine" für alle 20 stk.

Das soll noch einer verstehen #-o

rooter ist ein schreibfehler und soll projekt heißen!

und wg. aufwand: wenn ich für jedes realis einen trasnsistor diode usw. brauche, ist das für 20 realis eine riesen platine

izaseba
19.01.2008, 16:31
und wg. aufwand: wenn ich für jedes realis einen trasnsistor diode usw. brauche, ist das für 20 realis eine riesen platine

Ja was hast Du denn erwartet, solche Schaltung bedarf halt einer Minimalbeschaltung.
Du kannst natürlich den Transistor, Diode, Wiederstand weglassen, dafür Solidstate Relais verwenden, dann meckerst Du aber, daß es viel zu teuer wird...
Wie groß(klein) soll das ganze denn werden ?
Schau Dir mal die ULN 2000 Reihe an, damit erschlägst Du 7 Transistoren + Dioden, und bei Reichelt findest Du sicher kleine Relais.
Bedenke nochmal die Mindestbeschaltung von µC , Spannungsversorgung, Abblockkondensatoren, RS232 Beschaltung usw.

Gruß Sebastian

P.S.
Es ging sich nicht um


rooter ist ein schreibfehler und soll projekt heißen!

Sondern darum, daß Du eine 20fach Relaiskarte brauchst, wo 20 Relais ein riesen Aufwand sind
8-[

python_rocks
19.01.2008, 17:01
Hallo izaseba!

Mit dem ULN2004A http://www.alldatasheet.com/datasheet-pdf/pdf/25565/STMICROELECTRONICS/ULN2001A-ULN2002A.html spart er sich die Transistoren und die Vorwiderstände. Obwohl im ULN2004A auch Dioden verbaut sind, eignen sie sich aber nicht dafür, die Hochspannung beim Schalten des Relais abzubauen. Ich glaube, dafür braucht es die Diode direkt beim Relais und nicht gegen GND. Oder liege ich da falsch?

mfg
Gerold
:-)

EDIT: Von ULN2003A auf ULN2004A erhöht. ;-)

izaseba
19.01.2008, 17:26
Hallo Gerold ,

Erstmal meine Hochachtung, daß Du hier den Leuten fertige Programme schreibst, ich finde es didaktisch nicht gerade sinvoll aber trotzdem sehr nett.
Vielleicht hast Du Lust ein Artikel in der Wiki zu schreiben, dann haben mehr Leute was davon ;-)

Zu der Freilaufdiode, ja ich würde auch eine Freilaufdiode direkt an der Spule vorsehen, vor allem ist so eine Diode wirklich nicht groß und kostet (fast)nichts.
@tzlo,
Also Komando zurück, selbst wenn Du die ULNs verwendest verwende eine Freilaufdiode pro Relais, die kannst Du zur Not direkt an die Anschlüsse der Spule anlöten, fertig.
Als Relais könntest Du sowas (http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=C33;GROUPID=3293;ARTICLE=365 06;START=0;SORT=artnr;OFFSET=16;SID=30bgIX5qwQAR4A AEEi-q4eb6f83e9ec8c47cbe6bb48da517283bc)
nehmen Maße 29x11 mm.
Was möchtest Du damit jetzt schalten 220V oder was ?

Gruß Sebastian

python_rocks
19.01.2008, 18:05
Erstmal meine Hochachtung, daß Du hier den Leuten fertige Programme schreibst, ich finde es didaktisch nicht gerade sinvoll aber trotzdem sehr nett.
Hallo Sebastian!

Sagen wir es mal so: Ich wollte mir schon seit Monaten eine Relaisplatine mit RS-232-Anschluss machen. Nur konnte ich mich nie durchringen -- auch weil ich keinen direkten Bedarf dafür habe.

Deshalb habe ich die Anfrage von tzlo als Anlass genommen, endlich mal ein Programm für den ATmega8 zu schreiben. Bis jetzt habe ich noch nichts damit gemacht. So konnte ich Erfahrung im Umgang mit RS-232 und Bascom sammeln. So weiß ich jetzt z.B., dass ich, wenn ich auf das Herausfiltern des Zeilenumbruches (``chr(10)``) und die Überprüfung der Kommandolänge verzichten würde, ich direkt mit INPUT arbeiten könnte -- was ich im Programm nicht gemacht habe.

Ich bin Programmierer. Ich persönlich lerne ziemlich viel aus funktionierenden Codebeispielen. Diese lese ich so oft durch, bis ich genau verstehe wie das Programm funktioniert. Dann passe ich die Beispiele an, bis diese so laufen wie ich es gerne haben möchte.

tzlo bekommt keine Antwort zum Code mehr, bis er eine Frage stellt, die erkennen lässt, dass er sich damit auseinander gesetzt hat. -- Auch eine Art Didaktik. O:)

@tzlo: Das Programm für den ATmega wurde mit Bascom erstellt. Das Programm zum Testen am Computer habe ich mit Python erstellt. Du kannst aber auch jedes Terminalprogramm zum Testen verwenden. Du kannst dir aber auch ein eigenes Programm dafür schreiben -- was du ja sowiso irgendwo angedeutet hast.

tzlo
19.01.2008, 18:56
Hallo Gerold ,
Was möchtest Du damit jetzt schalten 220V oder was ?

jupp 220V


@phython rocks:

:-) hehe, ich habe den code verstanden! ich habe heute den Code auf nen atmega 8 übertragen, und leds angeschlossen! Hyerterminal gestartet und siehe da! Ich konnte mit 011 die erste led anschalten und mit ALL11111111111111111111 alle einschalten!!! bloß mit STATUS verstehe ich nicht ganz: ich bekomme nie eine antwort bzw. der atmega bleibt hängen wenn ich den status abfragen will! Worag liegt das?? Ich habe schon alle fusebits überprüft und verschiedene versionen des Codes überspielt!

tzlo
19.01.2008, 18:59
Als Relais könntest Du sowas (http://www.reichelt.de/?;ACTION=3;LA=4;GROUP=C33;GROUPID=3293;ARTICLE=365 06;START=0;SORT=artnr;OFFSET=16;SID=30bgIX5qwQAR4A AEEi-q4eb6f83e9ec8c47cbe6bb48da517283bc)
nehmen Maße 29x11 mm.

Das ist mir zu teuer! Ich habe bei pollin ein realis gefunden, dass mit 5 V arbeitet und 230V/ 5A schalten kann! Kosten tuts nur 90 cent!

MFG tzLo

python_rocks
19.01.2008, 19:31
bloß mit STATUS verstehe ich nicht ganz: ich bekomme nie eine antwort bzw. der atmega bleibt hängen wenn ich den status abfragen will!
Hallo tzlo!

Bekommst du eine Antwort bei den anderen Befehlen?

Bei mir sieht das z.B. so aus:

http://halvar.at/krimskrams/relais_mit_hyperterminal.gif

http://halvar.at/krimskrams/relais_mit_hyperterminal_konfiguration.gif

Was ich vorher als Befehl eingegeben habe, wird mir als "COMMAND: xxx" angezeigt. Und falls man ein unbekanntes Kommando übergibt, wird das mit einer Fehlermeldung angezeigt.

Ist das bei dir auch so? Und nur der Befehl "STATUS" funktioniert nicht? Da fällt mir im Moment nichts dazu ein.

NACHTRAG:


Ich habe bei pollin ein realis gefunden, dass mit 5 V arbeitet und 230V/ 5A schalten kann! Kosten tuts nur 90 cent!
Du musst nur darauf achten, dass die Relais, die mit weniger Spannung betrieben werden, meist auch viel mehr Watt verbrauchen. Ich habe mir vor zwei Wochen auch ein paar dieser 5 Volt-Relais und ein paar andere Relais bei Pollin bestellt. Beim Vergleichen der verschiedenen Relais ist mir das aufgefallen. Der Stromverbrauch dieser 5 Volt-Relais ist im Vergleich mit den 12 Volt Relais enorm. Also achte darauf, dass du eine gute Stromversorgung mit großen Kondensatoren hast, damit Versorgungsspitzen gut überwunden werden.

NACHTRAG 2:

Alleine die 20 5 Volt-Relais verbraten 14 Watt.

Würdest du stattdessen die 12 Volt-Relais "Relais SRB-S-112DM" verwenden und an eine eigene Stromversorgung anschließen, dann würden diese 20 Relais nur 4,2 Watt verbraten.

Die Spannung für den Controller könntest du mit einem 7805 IC auf 5 Volt herunterregeln. Dann kannst du ihn auch an die 12 Volt anschließen. Aber vergiss die Kondensatoren nicht um die Spitzen ein wenig auszugleichen. Siehe auch --> http://www.strippenstrolch.de/1-2-11-der-spannungsregler-78xx.html

mfg
Gerold
:-)

tzlo
20.01.2008, 12:37
so, fehler gefunden! BEi stopbits war die einstellung auf 0 und ich habe GND auf die außenhülle des steckers gelegt, nicht auf gnd

tzlo
22.01.2008, 13:29
komisch, das all00000000000000000100 dann gefunzt hat

python_rocks
22.01.2008, 13:46
Nachtrag zum Anschließen der Relais: http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.25.2