Bra komma igångguider för AVR + C ?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Den koden fungerar inte heller...
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Jo, det ska den göra. Har du pullup på PD2?
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Har du testat denna kod?

#include <avr/io.h>

int main(void)
{
DDRB = 0xFF;
DDRD = 0x00;
while(1)
{
if (PINB&0x02==0x02)
{
PORTB=0x1;
}
else
{
PORTB=0;
}
}
}

PINB är ju inpinnar på PORTB (databladet sid 15)
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

cykze, nej, vad är passligt värde?
Den kod du gav tänder en led, men inget händer när man pillar på knapparna. Inget händer heller om jag drar 5V till ingångsbenen på kretsen.

MicaelKarlsson, nepp, med dendär koden är alla leds släkta och inget händer på knapparna.
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

JIPPII nu fungerar det när jag drar 5V till PB0!
Dagen är räddad! :)

Tusen tack till er!
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Grattis!

Vad var det som gjorde att det funkade till slut?
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Hmm, det fungerar ej.

Ledsen på boardet är kopplade så att de tänds när en port dras låg, när jag pillade med 5V på en port blev det kortis = leden slocknade.

Alltså mao fungerar det inte ännu :(
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Nu fick jag det att fungera!

Tackar alla + speciellt Ollebull @ #Elektronik :)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Macce skrev:cykze, nej, vad är passligt värde?
Den kod du gav tänder en led, men inget händer när man pillar på knapparna. Inget händer heller om jag drar 5V till ingångsbenen på kretsen.

MicaelKarlsson, nepp, med dendär koden är alla leds släkta och inget händer på knapparna.
Om du inte använder något externt pullup så kommer knappen inte fungera om det är en vanlig slutande knapp. Enklast är om du aktiverar det inbyggda pullup-motståndet på just den pinnen som du har knappen kopplad till. Det gör du genom att sätta porten till ingång (genom DDRD) och sedan aktivera pullup:et (genom PORTD).

Kod: Markera allt

int main()
{
    DDRB = 0xFF; // Sätter alla pinnar som utgångar
    PORTB = 0xFF; // Sätter alla pinnar höga

    DDRD = 0x00; // Sätter alla pinnar som ingångar
    PORTD = _BV(PD2); // Aktiverar pullup på pinnen PD2

    while (1)
    {
        if (!(PIND & _BV(PD2))) // Om PD2 låg
        {
            PORTB &= ~_BV(PB0); // Sätt bit0 i PORTB till 0. (tänder led:en)
        }
        else
        {
            PORTB |= _BV(PB0); // Sätt bit0 i PORTB till 1. (släcker led:en)
        }
    }
}
Se verkligen till att du studerar databladet för kretsen noga. I det står i stort sett allt du behöver veta, förutom hur du hanterar interrupts i avr-gcc.
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Tack för koden, mycket jag känner igen från php i den, bara "innehållet" som jag inte kunde.

Aktiveras pullup på alla portar om jag lägger PORTD = 0xFF ? Är det till skada att ha pullup på de portar man inte använder?

Skall bläddra igenom databladet när jag hinner, det är ju inte direkt lite text i det :)

Finns det smidigare sätt att kräva att två knappar än intynda än

Kod: Markera allt

        if (!(PIND & _BV(PD2)))
        {
            if (!(PIND & _BV(PD3)))
             {
              PORTB &= ~_BV(PB0);
             }

        }
?
Provade med if (!(PIND & _BV(PD2) | _BV(PD3))) men det fungerade inte.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Funkar det med: if (!(PIND & _BV(PD2) & _BV(PD3)))
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Lysdioden lyser hela tiden med den koden.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

if (!((PIND & _BV(PD2)) & (PIND & _BV(PD3)))
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Macce skrev:Tack för koden, mycket jag känner igen från php i den, bara "innehållet" som jag inte kunde.

Aktiveras pullup på alla portar om jag lägger PORTD = 0xFF ? Är det till skada att ha pullup på de portar man inte använder?

Skall bläddra igenom databladet när jag hinner, det är ju inte direkt lite text i det :)

Finns det smidigare sätt att kräva att två knappar än intynda än

Kod: Markera allt

        if (!(PIND & _BV(PD2)))
        {
            if (!(PIND & _BV(PD3)))
             {
              PORTB &= ~_BV(PB0);
             }

        }
?
Provade med if (!(PIND & _BV(PD2) | _BV(PD3))) men det fungerade inte.
Jepp. Du kan t ex skriva:

Kod: Markera allt

if (!(PIND & _BV(PD2)) && !(PIND & _BV(PD3)))
{
    PORTB &= ~_BV(PB0);
}
edit: Sätter du ut en parentes till så borde ditt uttryck också fungera:
if (!(PIND & (_BV(PD2) | _BV(PD3))))
Senast redigerad av cykze 24 april 2005, 15:30:56, redigerad totalt 1 gång.
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Okay tackar och bockar igen. :)

När skall det vara &, &&, | osv och hur skall man veta det?
Skriv svar