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 :)
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
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
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.
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.