mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Übelste Anfängerfrage zum AVR GCC Tutorial -> Taster


Autor: Bastian F. (bastian_f)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite mich grade durch das Tutorial durch und bin schon froh, dass 
ich bis jetzt alles halbwegs auf die Reihe bekommen habe...

Nur kriege ich den Tasterteil nicht auf die Reihe.
Ich gehe mal davon aus, dass ich den einfach völlig falsch eingebaut 
habe (siehe Foto) aber alle anderen Versuche haben nichts außer 
Kurzschlüsse verursacht ;).
Kann mir also jemand sagen, was ich wie wo zuschalten/umschalten muss?

Danke!
#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */      
#include "pins.h"
#include <stdint.h>


/* Einfache Funktion zum Entprellen eines Tasters */
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
    if ( !(*port & (1 << pin)) )
    {
        /* Pin wurde auf Masse gezogen, 100ms warten   */
        _delay_ms(50);   // Maximalwert des Parameters an _delay_ms 
        _delay_ms(50);   // beachten, vgl. Dokumentation der avr-libc
        if ( *port & (1 << pin) )
        {
            /* Anwender Zeit zum Loslassen des Tasters geben */
            _delay_ms(50);
            _delay_ms(50); 
            return 1;
        }
    }
    return 0;
}
 
int main(void)
{

  DDRB &= ~( 1 << PB0 );        /* PIN PB0 auf Eingang Taster)  */
    PORTB |= ( 1 << PB0 );        /* Pullup-Widerstand aktivieren */
    DDRC = (1 << DDC5); 

    while (debounce(&PINB, PB0))
  //  while(1)
  {
       /* Falls Taster an PIN PB0 gedrueckt     */
       /* LED an Port PC5 an- bzw. ausschalten: */

  PORTC |= (1<<PC5);

    }

 

return 0;
}

Autor: fz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier es mal mit einem Pullup oder Pulldown Wiederstand

Autor: Bastian F. (bastian_f)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das habe ich auch probiert.
Also einen 10K Widerstand entweder an Masser oder Vcc zu legen und dann 
über den Schalter an den Pin, aber funktioniert auch nicht.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir fehlt die Stelle, wo der Ausgang wieder ausgemacht wird, also das 
Gegenstück zu

>   PORTC |= (1<<PC5);

Das Ganze dann bitte in einer Schleife, denn bei nicht gedrückter Taste 
beendet sich main() in nullkommanix und das war's dann schon gewesen. 
Der Anwender bekommt gar keine Chance, eine Taste zu drücken, außer er 
hat sie beim Start bereits gedrückt.

P.S.  Das hier

>         _delay_ms(50);   // Maximalwert des Parameters an _delay_ms
>         _delay_ms(50);   // beachten, vgl. Dokumentation der avr-libc

kann natürlich durch ein  _delay_ms(100) ersetzt werden.  Ich bitte 
das, was im Kommentar gefordert wird, auch wirklich vollständig zu tun 
und nicht nach dem ersten Satz mit Lesen aufzuhören.

Autor: Bastian F. (bastian_f)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, bin jedenfalls froh, dass es "nur" am Code lag und ich nicht zu 
doof für die Schaltung war.
Mit dieser Lösung (wahrscheinlich nicht wirklich elegant) geht es 
jedenfalls.
Danke für eure Hilfe!
while(1){
   
   if (!(PIND & (1<<PINC7))) 
  {
    PORTC |= (1<<PC5);
    _delay_ms(1000);
    PORTC &= ~ (1<<PC5);
     }
 }

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.