- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Taster Doppel- Dreifachbelegung Attiny2313 mit Blinkimpuls für Nixie Projekt

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.02.2017
    Beiträge
    7

    Taster Doppel- Dreifachbelegung Attiny2313 mit Blinkimpuls für Nixie Projekt

    Anzeige

    Powerstation Test
    Hallo alle miteinander

    Mein Name ist Jens,

    und ich benötige hilfe bei einem Nixieuhrenprojekt.
    Die Uhr war ein Bausatz und ist soweit montiert und funktionstüchtig.
    Nun zum Problem:

    Ich habe unter die Röhren, Blaue LED´s montiert und wollte diese mit einem Schalter ein und wieder ausschalten. Leider findet sich kein Schalter, der genauso aussieht wie die 2 Taster, die ich bereits an der Uhr habe. Also dachte ich mir, ein Taster und ein Attiny2313 (der noch von einem anderen Projekt übrig ist) tut es auch.
    Das wäre jetzt aber noch einfach zu lösen, aber ich habe noch Std / Min und Min / Sek Trenner dazwischen, die im 0,5hz Takt blinken sollen. Dieser Takt soll ebenfalls vom 2313 kommen und auch über den selben Taster ein und ausschaltbar sein.
    Nun bin ich ehrlich, ich habe keine Ahnung von C. Seit ca 9 Tagen versuche ich mich mit Codeschnippseln und scheitere kläglich.
    Das Blinken (ohne andere Funktionen) klappt
    Das Einschalten der LED´s klappt.
    Alles zusammen, klappt nicht. Weil ich keine Ahnung habe, wie es zusammengesetzt wird.
    Die Option jetzt C von der Pieke auf zu lernen, ist keine Wirkliche. Familie und Arbeit spannen mich schon genug ein und ne Programmiersprache lernt sich nunmal nicht von heute auf morgen.

    Könnte sich jemand vorstellen mir zu helfen?

    zu den Vorstellungen:

    PD2 als Eingang für den Taster, der gegen Masse schaltet und somit keine Hardwareentprellung braucht
    PD3 als Ausgang für die LED Beleuchtung
    PD4 als Ausgang für die Blinkenden Trenner
    optional:
    PD5 gegen Masse (hab in der Uhr einen NE555, der am Pin5 die Hochspannung steuert, schaltet man den gegen Masse, dann ist die Hochspannung ausgeschalten. der PD5 dürfte aber auch keine Spannung abgeben, also nur Spannungslos oder Masse dürfen anliegen)

    zu den Tastendrücken hatte ich mir gedacht:
    1x drücken, Blinken ein
    ein weiters mal drücken LED´s einschalten
    ein weiters mal drücken, alles aus und optional PD5 gegen Masse
    dann wieder von vorn

    Falls sich jemand findet, dann schon einmal vielen Dank.
    Wie gesagt, es ist keine Forderung, sondern nur eine freundliche Nachfrage.
    Geändert von Jens1 (01.03.2017 um 17:57 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Hallo und willkomen im Forum,

    Poste doch mal die Codeschnipsel.

    Wenn Du auf [Erweitert] klickst, bekommst Du die Codetags um
    Code:
    So was
    zu posten.

    Dann kann Dir vermutlich erher jemand helfen.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.02.2017
    Beiträge
    7
    Hallo i_make_it,

    wenn gewollt dann kann ich auch noch die Quellen angeben, wo ich diese codes gefunden habe.

    Blinken, ist bereits mit den sek. der Uhr abgestimmt, der code ist con hier
    Code:
    #define F_CPU 1000000UL		
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    int main(void) {
    
    	DDRD = (1 << PD5);
    
    	// Endlosschleife
    	for (;;) {
    		PORTD |= (1 << PD5);  // bit im Portregister auf 1 setzen => LED leuchtet
    		_delay_ms(1034);    // eine halbe Sekunde warten
    
    		PORTD &= ~(1 << PD5); // bit im Portregister auf 0 setzen => LED aus
    		_delay_ms(1034);    // eine halbe Sekunde warten
    	}
    		}
    das anschalten der LED hatte ich bereis auf einen taster reduziert. der code kommt von hier

    Code:
    #include <avr/io.h>
    
    int main(void) {
      DDRD  = 0b01100000;
      PORTD = 0x00;
    
      short led1 = 0;
    
      while(1) {
    		if(PIND & ((1 << PD2))) {
    		// irgendein Taster gedrückt
    
            if(PIND & (1 << PD2)) {
              // Taster 1 gedrückt → LED1 in Warteschlange setzen
              led1 = 1;
            }
          
        }
        else {
          // kein Taster gedrückt → Warteschlange abarbeiten
    
          if(led1 == 1) {         // LED1 in Warteschlange
            led1 = 0;             // LED1 aus Warteschlange herausnehmen
            PORTD ^= (1 << PD5);  // XOR an PD5 anwenden: 1 wenn bisher 0, 0 wenn bisher 1
         // }
    
        }
      }
      }
      return 0;
    }
    ich hoffe das hilft weiter
    Geändert von Jens1 (01.03.2017 um 19:10 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Ein Problem sind die "_delay_ms".
    In der Zeit macht der µC nichts (außer warten).

    Der Code ist so nicht gedacht das man mehr als das Blinken machen kann.

    Eine Möglichkeit wäre:
    Code:
    Startmarke {sofern main(void) nicht bereits eine Endlosschleife ist}
    Prüfen ob aktuelle Zeit minus Zeitstempel größer oder gleich der Verzögerungszeit ist
    Wenn ja, LED togeln und Zeitstempel neu setzen.
    
    Abfrage ob Taster betätigt
       Reaktion auf Tastendruck
    
    Sprung zur Startmarke {sofern main(void) nicht bereits eine Endlosschleife ist}
    Da ich mich mit dem Attiny2313 und dem C dafür nicht auskenne, kann keinen konkreten Code angeben.

    Nach kurzem suchen nach "Attiny2313 C ide" bekomme ich als erste Treffer Arduino IDE und Amtel Studio zurück.
    Mit was arbeitest Du denn?

    Die Suche nach "Attiny2313 _delay_ms();" hat mich zu:
    https://startingelectronics.org/tuto...2313-tutorial/
    geführt.

    Danach passt die Syntax zu Amtel Studio.

    Hier:
    http://www.ulrichradig.de/home/uploa...rogramming.pdf
    ab Seite 35 gibts was zu den Timern.

    Hier:
    https://startingelectronics.org/tuto...-polled-timer/
    findeset Du etwa in der Mitte der der Seite einen Code der mit dem Timer einen PIN togglet.
    Bei jedem Durchlauf der While Schleife wird geprüft ob die Bedingung für einen Toggle erfüllt ist und wenn nicht wird die Schleife weiter abgearbeitet (z.B. Tasterauswertung).
    Das ist eine Variante die es ermöglicht mehr als eine Sache auszuführen, da so eine Schleife einige tausend mal durchlaufen wird bevor einmal die Bedingung (1034 Millisekunden vergangen) erfüllt wird.
    Geändert von i_make_it (02.03.2017 um 09:44 Uhr)

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.02.2017
    Beiträge
    7
    Hallo i_make_it,

    vielen Dank erstmal. Ich werde mich morgen abend mal ransetzen und mal schauen was ich davon verstehe.
    das mit dem delay hatte ich auch schon vermutet und da kam mir die einfache idee, ich nehm 2 attiny2313.
    Der eine macht die Tastergeschichte, der andere wird durch den ersten mit Spannung versorgt und gibt dann wiederum den Blinkimpuls ab.
    Da die Blinkenden Trenner eh über einen Transistor laufen, ist auch nicht zu viel am 2313 dran.
    ist zwar nicht schn, aber vielleicht einfacher umzusetzen.
    Ich nutze im übrigen Amtel Studio 7.

    Gruß Jens

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    So Sachen wie delay/wait/sleep kontra Timer/Interrupt sind an sich nicht Sprachabhängig, sondern bei fast allen µC üblich.

    Delay ist fast immer ein KO für die Ausführung mehrerer Aktionen, da es die Programausführung einfach anhält. Sprich es wird nichts anderes verarbeitet (außer Hardwaretimer und Interrupts).

    Für so was zwei Attiniy zu nehmen, ist tatsächlich nicht schön. Ob es einfacher umzusetzen ist weis ich nicht, da ja immer noch der eine per Delay auf nichts reagiert. also auch nicht auch ein Signal von außen.
    Der führt dann 2068 Millisekunden pluß ein paar CPU Zykluszeiten das Blinken aus und reagiert da genau einmal auf einen eventuell grade dann anstehenden Pegel an einem Eingang.

    Entweder man baut das ganze mit diskreter Schaltlogik auf oder muß sich einmal mit µCs an sich und dem C-Dialekt vom Amtel Studio im besonderen auseinander setzen.

    Letzteres würde ich jetzt empfehlen.

    Der Code von:
    https://startingelectronics.org/tuto...-polled-timer/
    scheint mir ganz gut zu sein.
    Das Tutorial drumrum hilft dann vermutlich auch noch mal etwas weiter.
    Code:
    #include <avr/io.h>
    
    int main(void)
    {
        char toggle = 0;
    
        DDRD |= (1 << PD6); // LED on PD6
        
        TCCR0A = 0x02;      // Clear Timer on Compare Match (CTC) mode
        OCR0A  = 0xFF;      // number to count up to
        TCCR0B = 0x05;      // clock source CLK/1024, start timer
    
        while(1)
        {
            if (TIFR & 0x01) {      // timer timed out?
                TIFR |= 0x01;       // reset timer flag
                // toggle LED each time the timer times out
                if (toggle) {
                    toggle = 0;
                    PORTD &= ~(1 << PD6);
                }
                else {
                    toggle = 1;
                    PORTD |=  (1 << PD6);
                }
            }
        }
    }
    Eventuell klinkt sich hier ja auch noch jemand ein der mit der Kombination "Attiny2313, Amtel Studio 7 und C" vertraut ist.

    Bei dem Code oben wäre der Port für die LED anzupassen und der prescaler für den Timer, damit der Blinkintervall zu Deinen Anforderungen passt.

    Dann könnte man die Tasterabfrage hinter dem while (direkt vor dem If) einbauen.


    Zitat Zitat von Jens1 Beitrag anzeigen
    zu den Tastendrücken hatte ich mir gedacht:
    1x drücken, Blinken ein
    ein weiters mal drücken LED´s einschalten
    ein weiters mal drücken, alles aus und optional PD5 gegen Masse
    dann wieder von vorn
    Bei dieser Logik, kann man Blinken wählen, Blinken und LED's sowie alles aus.
    LED's ohne Blinken ist nicht auswählbar.
    Ist das so gewollt?
    Oder hast Du diese Option übersehen?
    Geändert von i_make_it (02.03.2017 um 10:14 Uhr)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    28.02.2017
    Beiträge
    7
    Hallo i_make_it,

    die Logik ist so gewollt. Die Hauptsache sind die Blinkenden Trenner, Nebensache die LED Beleuchtung. Vielen Dank für den Hinweis.

    Mit dem zweiten Attiny2313 dachte ich mir das so:

    Klicke auf die Grafik für eine größere Ansicht

Name:	Blink.jpg
Hits:	6
Größe:	44,1 KB
ID:	32457

    Dann könnte der Delaycode in den 2. 2313, und der erste versorgt den zweiten nur mit der Betriebsspannung wenn gewünscht.

    Dann wäre nur das Problem mit der mit den 3-4 Tastendrücken zu lösen.

    Ich werd mich jetzt erstmal mit deinen Links befassen und versuchen da was draus zu lernen.

    Danke schön
    Geändert von Jens1 (02.03.2017 um 20:19 Uhr)

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    28.02.2017
    Beiträge
    7
    Ich hab versucht etwas zu verstehen, aber momentan hab ich information overload und versteh grad nix mehr. Ich schlaf jetzt erstmal drüber.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Häppchenweise, nicht alles auf einmal.

    Die Blinkfunktion ist das wichtigste, da es die einzige Funktion ist die eine ständige Überwachung und Akrion (PIN Toggle) des µC's erfordert.
    Die Funktion muß als erstes sauber implementiert werden.
    Der Rest regiert ja nur bei Tastendruck.

    Da wäre dann die IRQ Auswertung eines Eingangs sinnvoll.
    In der ISR wird dann nur eine Zählervariable immer um 1 hochgezählt.
    In der normalen Programmschleife wird dann bei Zählerstand = 1 eine Variable fürs Blinken gesetzt.
    Bei Zählerstand = 2 eine Variable für die Beleuchtung
    Und bei Zählerstand = 3 wird der Zählerstand auf 0 gesetzt und beide Variablen gelöscht.

    Danach wird einmal geprüft ob die Variable für die Beleuchtung = 1 oder = 0 ist und dementsprechend der PIN für die Beleuchtung von 0 auf 1 oder von 1 auf 0 umgeschaltet.

    Beim Blinken wird das "toggle = 1;" in eine weitere Abfrage gepackt und dort geprüft, ob die Variable fürs Blinken = 1 ist.
    Somit lauft die Mimik fürs Blinken nach Zeit, ständig durch.
    Aber ob Die LED's wirklich leuchten hängt vom Zustand der Blinkvariable ab.

    Das ist so wie wenn Du das Rechtecksignal mit einem astabilen Multivibrator erzeugst und dann einen Transistor als Schalter hast, der das nur weiterleitet wenn an er durchgeschaltet ist.

    Bei einem Hardwaraufbau würde man auch genau das machen.
    Den Schalter/Taster als Takt für einen binären Zähler bis 3 nehmen (0-2). und dann per logischer Verknüpfung der Ausgangbits für den Zustand 1 und den Zustand 2 die jeweiligen Transistoren durchschalten die einmal die Versorgung der Beleuchtung und einmal das Rechtecksignal des Blinkens weiterleiten.
    Aus dem Kopf raus müsste man da mit 2 Flipflops und einem Exklusiv-Oder hinkommen.

    Wäre vermutlich auch eine interesannte Prä-Computer Lösungsvariante der Aufgabenstellung.
    Geändert von i_make_it (03.03.2017 um 19:43 Uhr)

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    28.02.2017
    Beiträge
    7
    das hier klingt auch interessant.

    klick

    Je tiefer ich da reingucke, umso undurchsichtiger wird es, find ich.
    Ich hatte ganz früher mal mit meinem C64 kleine Programme in Basic geschrieben. Lang ist es her. Ein paar Sachen kann ich mit Probieren anpassen, dann hört es aber schon wieder auf. Ich verstehe den Aufbau und die Zusammenhänge nur bedingt. Wie gesagt die 2 AT2313 Variante wäre mir auch recht, die hätte ich da und müsste nicht erst noch Teile bestellen.

    Dein anderer Lösungsvorschlag hat mir gezeigt, dass ich mal sowas von den falschen Ausbildungsweg eingeschlagen bin. Ich musste 90% davon googlen.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Beratung zu einem Projekt, Schrittmotor, Taster, Display
    Von amieXchen im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 07.04.2014, 22:24
  2. Poppige Nixie-Röhren
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 06.02.2014, 11:10
  3. Meine kleine Nixie Uhr
    Von Kampi im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 14
    Letzter Beitrag: 21.05.2013, 22:14
  4. Screens wechseln mit 2 Taster (oder mit einem Taster)
    Von tordy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.07.2009, 14:39
  5. NIXIE UHR
    Von MarkusLudwig im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 15.08.2006, 14:46

Berechtigungen

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

Solar Speicher und Akkus Tests