Guten Morgen, leider habe ich ein kleines Problem mit einem kleinen Source den ich letztens gebastelt habe. Zu der Ausgangslage mal noch kurz ein paar worte. Ich arbeite mit einem AtMega8, an dem ADC0 sind 3 Schalter mit verschiedenen Vorwiderständen. An PB6,PB2,PB1,PB0 Hängt ein Relaistreiber mit 4 Printrelais. Die Hardware funktioniert soweit einwandfrei. Nur der Source ist irgendwie nicht ok. Es passiert einfach nichts. Bei dem Tastersource habe ich mit an dem Beispiel von RN orientiert. Weis zufällig jemand was der Fehler sein könnte ??
> PORTB = (1 << PINB0); // PB0 amschalten Was soll das sein, "amschalten"? Umschalten oder aNschalten? Umschalten tut man mit einem Exklusiv-Oder, also "PORTB ^= (1 << PINB0)". "PORTB = (1 << PINB0)" schaltet nur ein (setzt den Portpin auf logisch 1). Ansonsten wäre eine kleine Beschreibung hilfreich, die besagt, was genau der Code denn machen soll, wenn er funktioniert. Abgesehen davon scheinst Du den Code Generation Wizard von CodeVision verwendet zu haben. Ich hoffe, Du hast bedacht, dass der von CVAVR generierte Code nur bedingt AVR-GCC-kompatibel ist (ich habe jetzt keine Zeit, den kompletten Code daraufhin durchzugehen...). Eine andere Sache ist, dass Du SIGNAL verwendest. SIGNAL wird zwar von der aktuellen WINAVR-Version noch unterstützt, allerdings sollte man in Hinblick auf "future compatibility" das Schlüsselwort ISR verwenden.
> #if TASTER_LEVEL > tast = !!tast; > #else > tast = !tast; > #endif Ich hoffe übrigens auch, dass Du Dir im Klaren darüber bist, was der "!"-Operator macht. Ich kapiere derzeit nicht ganz, was Du mit der logischen Negierung hier bezwecken willst. "tast = !tast;" ergibt für "tast" eine 0, wenn auch nur irgendein Bit in tast gesetzt ist (also wenn tast ungleich 0 ist) und 1, wenn tast gleich 0 ist. Ich vermute mal, dass hier eher der Bitkomplement-Operator "~" hingehört... Vielleicht verstehe ich aber auch nur den Sinn der Sache nicht.
Vielleicht solltest du erst mal klein anfangen und mit einem wesentlich einfacherem Beispiel beginnen. Gaaanz was simples: Einfach nur ein Relais einschalten, ohne dass ein Taster gedrückt sein muss, etc. Und dann schrittweise die restliche Funktionalität in Betrieb nehmen. Ansonsten: Ab in den Debugger und das Programm dort mal simulieren lassen.
ich habe das ganze schon getestet. ohne entprellung funktioniert es. Habe lange gebraucht den ADC soweit zu verstehen und damit auch umgehen zu können. Der generierte Source sollte funktionieren da ich ihn schon einzeln getestet habe. Das m sollte ein n werden, ein Tipfehler, stimmt schon. Ich war froh das mit dem Signal so verstanden zu haben, und wuste leider nicht das sich da etwas ändern wird, habe ich so nochnicht gelesen. Zur Funktion nochmal, bei dem ersten ADC Feld sollen 2 Relais anziehen, bei dem zweiten Feld nur eins und bei dem letzen Feld wieder 2 Relais. Mit der besonderheit das beim letzten Feld ein anderes Relais anziehen soll wenn es länger als 4 sekunden gedrückt wird. Und mal generell zu dem Source ja ich habe nochnicht viel für µCs geschrieben, aber gebe mir mühe es zu verbessern ;)
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.