Forum: Mikrocontroller und Digitale Elektronik Relaiskarte mit ATTiny2313


von Kevin T. (warensendung)


Lesenswert?

Moin,

zuallererst: bin neu hier und ich kenne mich mit mit Mikrocontrollern 
und deren Programmierung null aus. (In C krieg ich vielleicht n "Hello 
World!" hin... das wars dann aber auch)
Also bitte ich um "Nachsicht" ;)

Ich habe mir bei eBay zwei Relaiskarten mit 8 Relais gekauft. 
Angeschlossen werden diese über USB und werden dann als serielle 
Schnittstellen erkannt.
Die Steuerung ist eigentlich recht einfach:
Sende ich über den COM-Port z.B. eine "1" schaltet Relais1 an... Sende 
ich nochmal eine 1 schaltet Relais 1 wieder aus.
Beim schalten sind die Relais "ganz normal" nummeriert (1, 2, 3, 4, 5, 
6, 7, 8).

In regelmäßigen Abständen sendet das Teil die Zustände der Relais. 
Hierbei haben die Relais folgende Werte: 1, 2, 4, 8, 16, 32, 64, 128. 
Gesendet wird die Summe der Werte der eingeschalteten Relais.

Die Karten haben einen ISP Anschluss für einen Programmer. Jetzt möchte 
ich gerne das das Schalten der Relais mit den gleichen Werten 
funktioniert wie jene bei den "Zustandsmeldungen".

Beispiel:
Sende ich die "177" sollen die Relais 1, 5, 6 und 8 einschalten und alle 
anderen ausschalten.


Den Original-"Quelltext" (nennt man das hier auch so? ;)) habe ich hier:
http://pastebin.com/DrXTp8bS (die Variablennamen sind wohl polnisch)

Kann mir jemand helfen? Wär sehr freundlich :D

Vielen Dank schonmal :)

von Heinz (Gast)


Lesenswert?

Ich kenne mich mit Bascom? nicht aus, aber wenn du experimentierfreudig 
bist, kannst du in Zeile 43 mal
1
43: Set Portb.Calk2
2
44:  Goto Koniec

schreiben.

Viel Glück

von Alexander S. (esko) Benutzerseite


Lesenswert?

Kevin T. schrieb:
> In C krieg ich vielleicht n "Hello World!" hin...

Dein Code ist Bascom/Basic.


> Die Karten haben einen ISP Anschluss für einen Programmer.

Ja, man kann den Mikrocontroller umprogramieren, wenn man ein 
entsprechendes Gerät, einen Programmer, hat.
Hast du so einen?
Hier im Shop oder bei Pollin gibt es so einen. Kostenpunkt ~20€


> Den Original-"Quelltext" (nennt man das hier auch so? ;)) habe ich hier:
> http://pastebin.com/DrXTp8bS (die Variablennamen sind wohl polnisch)

Das wirst du schon selbst machen müssen.
Versuche erstmal das Programm zu kompilieren und auf den Mikrocontroller 
zu überspielen. Dann kannst du den Quelltext ändern.

Hier ist die Basic Entwicklungsumgebung für AVR:
http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=86&category_id=5&option=com_phpshop&Itemid=1

von R. M. (rmax)


Lesenswert?

Ein fertiges Ergebnis kann ich Dir mangels Bascom-Kenntnissen nicht 
liefern aber prinzipiell ist folgendes zu ändern:

Zeile  1: B nicht als Byte, sondern als String deklarieren.
Zeile 38: Nicht ein Byte, sondern eine ganze Zeile (1..3 Zeichen) 
einlesen.
Zeile 39: Fehlerbehandlung anpassen.
Zeile 40: Einen String statt eines einzelnen Bytes in den entsprechenden
          Wert umrechnen und der Variablen Wyslij zuweisen.
Zeile 41..75 löschen.
Zeile 76: Wyslij auf Port B ausgeben.

Als Aufräumarbeiten kannst Du am Ende noch die Deklarationen für Calk, 
Calk2 und Zmienna entfernen.

von Kevin T. (warensendung)


Lesenswert?

Programmer habe ich noch nicht, ist aber schon bestellt :)


Hmm... Hab hier noch ne andere Version vom Sourcecode. Hier werden bei 
"Pr2" alle Relais ausgeschaltet. Sieht dann so aus:
1
Pr2:
2
Reset Portb.0
3
Reset Portb.1
4
Reset Portb.2
5
Reset Portb.3
6
Reset Portb.4
7
Reset Portb.5
8
Reset Portb.6
9
Reset Portb.7
10
Wyslij = 0
11
Return

Wenn ich das richtig verstanden hab wird bei "Reset Portb.0" das Relais 
1 ausgeschaltet und bei "Set Portb.0" Relais 1 eingeschaltet. Hab ich 
das soweit richtig verstanden?

Muss ich dann nicht irgendwie den gesendeten Wert durch ne Schleife 
laufen lassen und jedes Relais einzeln schalten?

Und irgendwie muss ich ja noch sagen das er auf nen Umbruch warten muss 
bevor er anfängt auszuwerten. Aktuelle wird ja direkt nach Tastendruck 
ausgewertet.

So wie ich das sehe hat die Variable "Wyslij" mit den Schaltvorgängen ja 
nix zu tun sondern ist nur für die Statusmeldungen da, oder?

Wie gesagt... Bitte nicht schlagen wenn ich total daneben lieg ;)

von R. M. (rmax)


Lesenswert?

Kevin T. schrieb:

> Wenn ich das richtig verstanden hab wird bei "Reset Portb.0" das Relais
> 1 ausgeschaltet und bei "Set Portb.0" Relais 1 eingeschaltet. Hab ich
> das soweit richtig verstanden?

Ja, Set und Reset schalten jeweils einen einzelnen I/O-Pin ein und aus, 
aber ...

> Muss ich dann nicht irgendwie den gesendeten Wert durch ne Schleife
> laufen lassen und jedes Relais einzeln schalten?

... wenn Du die Zustände aller Relais schon als einen Bytewert vorliegen 
hast, dann kannst Du den Wert auf einmal am Port B ausgeben, statt die 
Bits einzeln zu setzen und zu löschen. Und das Status-Format, das Du nun 
auch als Eingabeformat verwenden willst, ist nichts anderes als die 
ASCII-Darstellung eben dieses Bytewerts.

> Und irgendwie muss ich ja noch sagen das er auf nen Umbruch warten muss
> bevor er anfängt auszuwerten. Aktuelle wird ja direkt nach Tastendruck
> ausgewertet.

Ja, entweder die Zeichen sammeln bis ein Umbruch kommt oder (so 
vorhanden) eine Funktion verwenden, die erst dann einen String 
zurückgibt, wenn eine ganze Zeile empfangen wurde.

> So wie ich das sehe hat die Variable "Wyslij" mit den Schaltvorgängen ja
> nix zu tun sondern ist nur für die Statusmeldungen da, oder?

Im Originalcode schon. Weil Du aber das gleiche Format für Ein- und 
Ausgabe haben willst, brauchst Du auch nur diese eine Variable für den 
aktuellen Zustand, der dann an den Port ausgegeben und auch als Status 
an den PC gemeldet wird.

Wenn Du allerdings vom PC aus eh immer den Zustand aller Relais auf 
einen Schlag festlegst, brauchst Du die Statusmeldung eigentlich nicht 
mehr.

Übrigens, wenn Dir C etwas geläufiger ist als Basic: das Ganze nach 
Deinen Anforderungen in C und mit verständlicheren Bezeichnern neu zu 
schreiben dürfte kaum mehr Aufwand sein, als das Basic-Programm 
anzupassen.

> Wie gesagt... bitte nicht Schlagen wenn ich total daneben lieg ;)

Attachments, die auf den Betrachter physische Gewalt ausüben, sind in 
diesem Forum leider noch nicht implementiert. ;)

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.