- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: Taster entprellen?

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Anzeige

    E-Bike
    Die LED verdratung ist bein STK 500 auch etwas Trikreich...daran gedacht?

    https://storage.driveonweb.de/dowdoc...37c322ceb9.JPG

    Gruß Richard
    Geändert von Richard (02.08.2011 um 07:16 Uhr)

  2. #12
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    44
    Beiträge
    230
    Ja Du hast recht, Taster getürkt Dan logische 0, LED an Dan logische 0.

    Nur wie mach ich das jetzt mit meiner Funktion.
    So?
    Code:
    /*
    Funktion zum Tasten entprellen 
    taster([PORTx], ([PDx]|[PDy]|[PDz]|.usw ))
    
    Ich lese den PIND, PD0 ein und gebe ihn entprellt wider am PORTB aus.
    Test Bort ist das STK500 mit Atmega644 8MHz.
    PORTB ist auf LED's, und PORTD ist auf Taster geschaltet.
    
    
    Taster Getrükt da 0, LED 0 dan an.
    */
    #include <avr/io.h>
    #include <stdint.h> 
    #ifndef F_CPU
    #warning "F_CPU war noch nicht definiert, wird nun mit 8000000 Hz definiert"
    #define F_CPU 8000000UL     /* Quarz mit 8000000 Hz  */
    #endif
    #include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */      
     
    //Funktions Prototypen
    
    uint8_t taster(uint8_t* pinx, uint8_t px);
    
    
    int main (void)
    {
    
    DDRB = 0xff;        //PORTB Ausgang
    PORTB = 0xff;
    
    
        while(1)           //Hauptschleife
        {
    
            if(taster(PIND, PD0)) //Taster0 Abfragen 
            {
    
                            
                PORTB = ~PD0;  //LED0 Einschalten 
            }    
    
        }                //Hauptschleife Ende
    return 0;
    
    }    //Main Ende                
    
    
    //Funktion, taster([PORTx], ([PDx]|[PDy]|[PDz]|.usw ))
    uint8_t taster(uint8_t* pinx, uint8_t px)
    {
    
        if(~( *pinx & (1 << px)))
        {
            _delay_ms(10);
        }
        
        else
        {
            return 0;
        }
    
        if( ~(*pinx & (1 << px)))
        {
            return *pinx;
        }
    
        else
        {    
            return 0;
        }
    
    }
    Wen ich das so ändere.

    Code:
    while(1)           //Hauptschleife
        {
    
            if(taster(PIND, PD0)) //Taster0 Abfragen 
            {
    
                            
                PORTB = ~PD0;  //LED0 Einschalten 
            }    
    
        }                //Hauptschleife Ende
    dan sin ale LED's aus.

    Ich habe immer noch Warnungen und kann das nicht nach Vollziehen, warum, kan mir jemand das erklären (ich mag das mit den Pointern nicht so, weil man nicht gleich durchblickt, was da steht.)

    Code:
    Build started 2.8.2011 at 12:25:09
    avr-gcc  -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Taster.o -MF dep/Taster.o.d  -c  ../Taster.c
    ../Taster.c:15:2: warning: #warning "F_CPU war noch nicht definiert, wird nun mit 8000000 Hz definiert"
    ../Taster.c: In function 'main':
    ../Taster.c:35: warning: passing argument 1 of 'taster' makes pointer from integer without a cast
    ../Taster.c:22: note: expected 'uint8_t *' but argument is of type 'uint8_t'
    avr-gcc -mmcu=atmega644 -Wl,-Map=Taster.map Taster.o     -o Taster.elf
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  Taster.elf Taster.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex Taster.elf Taster.eep || exit 0
    avr-objdump -h -S Taster.elf > Taster.lss
    
    AVR Memory Usage
    ----------------
    Device: atmega644
    
    Program:     208 bytes (0.3% Full)
    (.text + .data + .bootloader)
    
    Data:          0 bytes (0.0% Full)
    (.data + .bss + .noinit)
    
    
    Build succeeded with 2 Warnings...
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  3. #13
    Hi!

    Hallo Community! :o)

    So, Ferdinand, nun zu Deinem Anliegen...

    Nimm bitte mal die Warnung bzgl. Zeile 35 ernst. Mir ist nicht klar, warum uint8_t taster(uint8_*, uint8_t) als ersten Parameter einen Pointer haben muß. Du liest ja lediglich den Inhalt, auf den pinx zeigt, aus. Falls dort aber eine Pointer-Variable hingehört, dann mußt Du beim Aufruf eine Referenz auf PIND übergeben:

    Zeile 35: if(taster(&PIND, PD0)) //Taster0 Abfragen

    Probier's mal damit...


    Gruß,

    -Mike

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Taster entprellen für TTL-BCD-Zähler
    Von tobi.robotz im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 26.11.2009, 20:28
  2. Probleme mit Taster entprellen
    Von Mr Bean im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 08.05.2007, 17:12
  3. Entprellen von Taster
    Von Exodus im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 10.07.2006, 10:15
  4. Taster Entprellen mit Bascom
    Von hardstyleroxx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.01.2005, 16:41
  5. Taster entprellen
    Von RCO im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 14.10.2004, 12:59

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress