mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Relaiskarte mit ATTiny2313


Autor: Kevin T. (warensendung)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Heinz (Gast)
Datum:

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

schreiben.

Viel Glück

Autor: Alexander Schmidt (esko) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kevin T. (warensendung)
Datum:

Bewertung
0 lesenswert
nicht 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:
Pr2:
Reset Portb.0
Reset Portb.1
Reset Portb.2
Reset Portb.3
Reset Portb.4
Reset Portb.5
Reset Portb.6
Reset Portb.7
Wyslij = 0
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 ;)

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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. ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.