www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit einem kleinen Source auf einem ATMega8


Autor: Martin (Gast)
Datum:
Angehängte Dateien:

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

Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier noch die taster.c

Autor: Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und die Taster.h

Autor: johnny.m (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

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

Autor: Martin (Gast)
Datum:

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

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.