-
        

Ergebnis 1 bis 8 von 8

Thema: Münzzähler C-Control I Unit M-2.0 Programmierung

  1. #1

    Münzzähler C-Control I Unit M-2.0 Programmierung

    Anzeige

    Hallo,

    als Projektarbeit an der Schule steht die Konstruktion, der Bau und Betrieb eines einfachen Münzzählers an. Das heißt, man wirft verschiedene Münzen ein und das Gerät zeigt den eingeworfenen Betrag an, ähnlich wie bei Parkscheinautomaten.

    Der zur Verfügung stehende Controller ist eine C-Control I Unit M-2.0. Die Münzen laufen über ein Sortierrondell und lösen nach durchwandern einen von 8 verschiedenen Schaltern aus. Es sind einfache Kontaktschalter, welche an die ersten 8 Digitalports angeschlossen sind. Der gezählte Betrag wird auf eine LCD-Anzeige übertragen.

    Wenn das Programm auf den Controller überspielt wird, kommt es zu folgendem Fehlverhalten:
    - Startbetrag ist 3,88 € (Summe der Einzelmünzen 2+1+0,5+0,2+0,1+0,05+0,02+0,01)
    - Der Controller zählt ohne Tastendruck wild drauf los

    Im Simulator der Conrad C-Control/CCBASIC 2.0 IDE scheint das Programm tadellos zu funktionieren. Meine Frage ist nun, ob jemand Fehler im Programmcode findet und korrigieren könnte oder andere Gründe und Lösungen wüsste, welche dazu führen, dass der Controller unmotiviert zählt.

    Nebenfrage: Ist jemandem schon öfters das Programmierboard für die Unit M 2.0 kaputt gegangen und weiß auch da Rat?

    Zum Schluss noch der Programmcode.
    Für Hilfe wäre ich dankbar
    bfelix

    Code:
    DEFINE schalter BYTEPORT[1] 'Definiere Byteport 1 (Schalter 1-8) als Schaltervariable
    DEFINE muenzbetrag WORD[1] 'Eingeworfener Münzbetrag
    DEFINE alter_muenzbetrag WORD[3]
    DEFINE eur WORD[4]
    DEFINE cent BYTE[9]
    DEFINE aktueller_schalter BYTE[4] 'Kopie von Byteport 1
    DEFINE vormaliger_schalter BYTE[3] 'Kopie von Byteport 1 der jeweils vorherigen Schleife, dient als Sperre um Münzen nicht doppelt zu registrieren
    DEFINE sperre_1 BIT[17] 'Ausschnitt der vormaliger_schalter Variable als Ja/Nein Schalter für die Auswertung
    DEFINE sperre_2 BIT[18]
    DEFINE sperre_3 BIT[19]
    DEFINE sperre_4 BIT[20]
    DEFINE sperre_5 BIT[21]
    DEFINE sperre_6 BIT[22]
    DEFINE sperre_7 BIT[23]
    DEFINE sperre_8 BIT[24]
    DEFINE schalter_1 BIT[25] 'Ausschnitt der aktueller_schalter Variable als Ja/Nein Schalter für die Auswertung
    DEFINE schalter_2 BIT[26]
    DEFINE schalter_3 BIT[27]
    DEFINE schalter_4 BIT[28]
    DEFINE schalter_5 BIT[29]
    DEFINE schalter_6 BIT[30]
    DEFINE schalter_7 BIT[31]
    DEFINE schalter_8 BIT[32]
    
    'Initialisierung
    vormaliger_schalter = 0
    aktueller_schalter = 0
    muenzbetrag = 0
    
    PRINT"#ON_LCD#";
    PRINT"#INIT#";
    PRINT"#CLR#";
    PRINT"#L101#";
    PRINT "Muenze einwerfen";
    PRINT"#L201#";
    PRINT "GELD:";
    PRINT"#L214#";
    PRINT "EUR";
    PRINT"#OFF#";
    
    #schleifenanfang
    IF (muenzbetrag <> alter_muenzbetrag) THEN GOTO ausgabe
    IF (schalter <> vormaliger_schalter) THEN GOTO auswerten ELSE PRINT "Keine Änderung an den Schaltern"
    GOTO schleifenanfang
    
    #auswerten
    aktueller_schalter = schalter
    IF (aktueller_schalter < vormaliger_schalter) THEN GOTO entsperren
    IF (aktueller_schalter > vormaliger_schalter) THEN GOTO berechnen_und_sperren
    
    #entsperren
    vormaliger_schalter = aktueller_schalter
    IF (vormaliger_schalter = 0) THEN PRINT "Alle Schaltersperren wurden gelöst" ELSE PRINT "Schaltersperren wurden gelöst"
    
    'Für Fehlersuche wieder einkommentieren
    'PAUSE 100
    
    GOTO schleifenanfang
    
    #berechnen_und_sperren
    IF (schalter_8 <> 0 AND sperre_8 = 0) THEN muenzbetrag = muenzbetrag + 200
    IF (schalter_7 <> 0 AND sperre_7 = 0) THEN muenzbetrag = muenzbetrag + 100
    IF (schalter_6 <> 0 AND sperre_6 = 0) THEN muenzbetrag = muenzbetrag + 50
    IF (schalter_5 <> 0 AND sperre_5 = 0) THEN muenzbetrag = muenzbetrag + 20
    IF (schalter_4 <> 0 AND sperre_4 = 0) THEN muenzbetrag = muenzbetrag + 10
    IF (schalter_3 <> 0 AND sperre_3 = 0) THEN muenzbetrag = muenzbetrag + 5
    IF (schalter_2 <> 0 AND sperre_2 = 0) THEN muenzbetrag = muenzbetrag + 2
    IF (schalter_1 <> 0 AND sperre_1 = 0) THEN muenzbetrag = muenzbetrag + 1
    PRINT "Münze eingeworfen und ausgewertet"
    vormaliger_schalter = aktueller_schalter
    PRINT "Schalter wurden gesperrt"
    
    'Für Fehlersuche wieder einkommentieren
    'PAUSE 100
    
    GOTO schleifenanfang
    
    #ausgabe
    alter_muenzbetrag = muenzbetrag
    eur = muenzbetrag / 100
    cent = muenzbetrag MOD 100
    PRINT"#ON_LCD#";
    PRINT"#L211#";
    PRINT cent;
    PRINT"#L210#";
    PRINT ",";
    IF (eur > 1) THEN PRINT"#L209#";
    IF (eur > 10) THEN PRINT"#L208#";
    IF (eur > 100) THEN PRINT"#L207#";
    IF (eur > 1000) THEN PRINT"#L206#";
    PRINT eur;
    PRINT"#OFF#";
    PRINT muenzbetrag;
    GOTO schleifenanfang

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    Schmeiss am besten die Kontaktschalter raus, Diese scheinen zu prellen.
    Lichtschranken sind da besser, und meistens direkt an die C-Control
    anschliessbar. VG Micha

  3. #3
    Danke für die Antwort.

    Inwiefern kann ich die Lichtschranken direkt anschließen? Oder einfach nur ohne Vorwiderstand? Wir haben versucht durch Widerstände und Transistorschaltungen ein Prellen zu unterbinden. Ist das so nicht möglich? Der Controller zählt auch ohne Tastendruck unmotiviert los, prellen müsste doch zumindest einen Tastendruck benötigen und würde nicht zu ununterbrochenem Zählen führen? Eignen sich prinzipiell alle Lichtschranken von Conrad für dieses Vorhaben, wie würden sie angeschlossen (ich sehe mehrere Kontake) und muss ich auf diese teuren Reflektoren zurückgreifen oder reicht auch einfache Alufolie?

    Grüße
    bfelix

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2006
    Ort
    Dresden
    Alter
    62
    Beiträge
    370
    Hi,
    deine Beschreibung klingt nach "in der Luft" hängenden Eingängen. Das heisst, sind die Schalter offen, haben die Eingänge ein undefiniertes Potenzial, bzw bei aktivierten (internen) Pullups wird ohne gedrückten Taster ständig H eingelesen.
    Wenn dem so ist: Die Taster nach Plus anschliessen, die Eingänge über jeweils einen Widerstand (~1KOhm) nach Masse.
    Kontaktprellen kann man einfach mit einer kleinen Pause in den Unterprogrammen "ausbremsen".
    MfG Lutz
    Wir haben so viel mit so wenig solange versucht, das wir jetzt qualifiziert sind, fast alles mit fast nichts zu bewerkstelligen.

  5. #5
    Danke für die Antwort.

    Leider komme ich erst am Montag über die Schule an entsprechende Widerstände. Reicht ein 1 kOhm Widerstand aus, wo ich mit allen 8 Schaltern drauf gehe und dann auf GND oder muss ich für jeden einzelnen Schalter einen 1 kOhm Widerstand verwenden? Welche Pause beim "ausbremsen" hat sich denn als praktikabel erwiesen?

    Grüße
    bfelix

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    soviel zeit wie du hast 1-10 ms reichen völlig aus

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2006
    Ort
    Dresden
    Alter
    62
    Beiträge
    370
    Hi,
    natürlich pro Schalter... Also, Plus an Schalter, Schalter an Eingang und Widerstand, Widerstand an Masse.
    Der Wert ist bei deaktivierten internen Pullups unkritisch, sollte etwa im Bereich vom 1- 100KOhm liegen. Sind die internen Pullups aktiviert, ergibt sich ein Spannungsteiler, deshalb mein Vorschlag von etwa 1kOhm, der noch ein sicheres L ergibt.
    LG Lutz
    Wir haben so viel mit so wenig solange versucht, das wir jetzt qualifiziert sind, fast alles mit fast nichts zu bewerkstelligen.

  8. #8
    Danke für die Antworten.

    Jetzt muss ich nur noch nen funktionstüchtiges Programmierboard auftreiben und herausfinden wie man theoretisch die Lichtschranken verkabelt, wenn das nicht vorher am Preis scheitert. Aber vielleicht klappt es ja auch morgen mit dem entprellen der Taster.

    Grüße
    bfelix

    Nachtrag 27.05.
    Nachdem das Lehrpersonal uns auf die Qualität des Equipments hingewiesen hat und die Taster entprellt wurden, konnte der Münzzähler seinen Dienst aufnehmen. Vielen Dank für die Hilfe!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •