Seite 1 von 1

Impuls als Schaltsignal

Verfasst: 12.12.2008, 23:40:49
von tomi86
Hallo,
hab den Webserver erfolgreich als mein erstes "Projekt" aufgebaut, und deshalb auch noch sehr wenig Ahnung von C-Programmierung. Für meine Anwendung des Webservers benötige ich am Ausgang ein ca. 0,5 bis 1 Sekunde langen Impuls. Das heißt, ich will auf der Seite des Webservers ein Butten haben, der nachdem er angeklickt wurde, einmalig diesen Schaltimpuls auf einen Ausgang legt. Würde mich freuen wenn mir jemand einen Tipp geben könnte wie ich sowas machen kann, bzw. in welchen Dateien ich die Anpassung vornehmen muss.
Gruß Tomi

Re: Impuls als Schaltsignal

Verfasst: 13.12.2008, 11:23:29
von Andy
Schau mal hier:
http://www.ulrichradig.de/site/forum/vi ... =35&t=1264

Ich denke, mit der Antwort von Wil solltest du schon was anfangen können.
Bei mir bin ich mit _delay_ms(...); klargekommen, eingetragen hab ich das ganze bis jetzt nur in der httpd.c und sieht so aus:

Code: Alles auswählen

PORTA = PORT_tmp;
PORT_tmp = 0;
//hier kommt der Zusatz für den Timer:
_delay_ms(200);
//und den Ausgang wieder ausschalten:
PORTA = 0;
Bei deinen langen gewünschten Zeiten wird dir _delay_ms(...); aber wohl keine große Hilfe sein, denn solange der Timer läuft, macht der Controller nichts anderes als Zeit zu vertrödeln - die Webseite wird also erst nach Ablauf des Timers übertragen.


Noch ein bisschen Howto zu den Buttons:
Wenn du nur noch mit Buttons arbeiten willst und keine Checkboxen mehr haben willst, dann müssen die Buttons in der webpage.h so aussehen:

Code: Alles auswählen

"<form name=\"form1\" method=\"post\" action=\"\">"
"<input type=\"hidden\" name=\"OUT\" value=\"A\">"
"<input type=\"submit\" name=\"SUB\" value=\"Beschriftung_des_Button\">"
"</form>"
Grafische Buttons sind deutlich aufwändiger, weil normalerweise die Koordinaten des Mausklicks mit übertragen werden und daher statt "OUT=A&SUB=Name_des_Button" bei grafischen Buttons "OUT=A&SUB.x=8&SUB.y=9" übertragen wird. Damit kann die Software dann nichts anfangen.

Meine Lösung für grafische Buttons sieht in der webpage.h so aus:
Erstmal etwas Javascript im HTML-Title:

Code: Alles auswählen

"<script type=\"text/javascript\">\r\n"
	"function send(pin) {\r\n"
	"var OUT = document.createElement(\"INPUT\");\r\n"
	"OUT.type = \"hidden\";\r\n"
	"OUT.value = pin;\r\n"
	"OUT.name = \"OUT\";\r\n"
	"document.getElementById(\"hide\").appendChild(OUT);\r\n"
	"var SUB = document.createElement(\"INPUT\");\r\n"
	"SUB.type = \"hidden\";\r\n"
	"SUB.value = \"x\";\r\n"
	"SUB.name = \"SUB\";\r\n"
	"document.getElementById(\"hide\").appendChild(SUB);\r\n"
	"document.getElementById(\"hide\").submit()\r\n"
    "}\r\n"
	"</script>\r\n"	
Dann muss im Body ein Element verhanden sein, was die Methode "Post" verwendet, um diese dann vom Javascript übernehmen zu können:

Code: Alles auswählen

"<div style=\"display: none;\"><form method=\"post\" action=\"\" id=\"hide\"></form></div>\r\n"
Und der eigentliche grafische Button sieht dann so aus:

Code: Alles auswählen

"<a href=\"javascript:send('A')\"><img src=\"%PORTA0\" border=\"0\"></a>\r\n"
Damit bei %PORTA0 eine Grafik ausgegeben wird, habe ich noch die translate.c angepasst (direkt %PINA0 abzufragen sollte aber glaube ich auch gehen):

Code: Alles auswählen

if(b) {
//strcpy_P(dest, PSTR("checked")); Ursprünglicher Eintrag
strcpy_P(dest, PSTR("ledon.gif"));
}
else {
//strcpy_P(dest, PSTR("unchecked")); Ursprünglicher Eintrag
strcpy_P(dest, PSTR("ledoff.gif"));
}

Re: Impuls als Schaltsignal

Verfasst: 14.12.2008, 12:46:07
von tomi86
Hallo,
danke für die schnelle und vorallem ausführliche Erläuterung, werde es sobald ich bissle Zeit hab mal probieren.

Re: Impuls als Schaltsignal

Verfasst: 17.09.2009, 17:58:59
von DundeeFSK
So, sorry aber ich muss den Thread noch mal rausholen.

Ich habe eine abgespeckte Version von Ullis Stack auf dem Pollin-Board laufen und möchte
nun die Ausgänge tasten.

Habe in der httpd.c

Code: Alles auswählen

case ('A'):
PORTC = PORT_tmp;
PORT_tmp = 1;
_delay_ms(200);
PORTC = 0;
eingetragen.

Es passiert aber etwas komisches. Wenn ich den Button beim ersten mal drücke geht der Ausgang auf 1. Aber nicht auf 0. Beim weiteren klicken geht der Ausgang für 0,2 Sekunden auf 0 und dann wieder auf 1. Eigentlich sollte es genau umgekehrt sein.

Kennt jemand den Grund?

//ERLEDIGT...

Code: Alles auswählen

PORTC = 0x01;
_delay_ms(200);
PORTC = 0x00;