C och skiftregister (PIC)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

C och skiftregister (PIC)

Inlägg av jack »

Tjena. Lite tråkigt att jag måste fråga direkt jag ska programmera nåt, men jag lär mig väl med tiden.

Allafall:
Har två skiftregister, kopplade med separata data- och klocklinjer till totalt fyra portar på en PIC16F628A. Skulle nu vilja skriva ut data till dessa i en följd.

Dvs om jag vill skriva ut värdet "1100111000000011" så ska "11001110" ut till det första och "00000011" till det andra.

Tyvärr räcker inte mina C-kunskaper till för detta.

Tacksam för svar.

//jack
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Kod: Markera allt


void Send_Out_Word(int Data)
  {
  char Counter;
  for(Counter = 0;Counter < 8;Counter++)
    {
    if(Data & 0x8000) Data1 = 1;
    else              Data1 = 0;
    if(Data & 0x0080) Data2 = 1;
    else              Data2 = 0;
    Clock1                  = 1;
    Clock2                  = 1;
    Clock1                  = 0;
    Clock2                  = 0;
    Data                  <<= 1; // Shift it left 1 notch
    }
  }
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Tack, Icecap! Det där funkar säkert skitbra. När jag väl får igång PICen överhuvudtaget.

Lite skumt just nu. Jag har proggat så att PORTB ska slås på och av, men jag får typ konstant 1V på pinnarna.. Vad kan vara fel?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vad mäter du med ?
Vad är anslutet till pinnarna ?
Senast redigerad av sodjan 20 januari 2006, 22:57:16, redigerad totalt 1 gång.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Verkar vara min ICSP-programmerare som ville bråka lite.. När jag tog ur den kontakten så verkar allt funka som det ska..

Men vafan, ska man inte kunna ha den i samtidigt? Eller har jag bara kopplat dumt?

Det är en K150. Data och clock är kopplade direkt dit som ska. Inget annat till de portarna. Allt annat också kopplat direkt. Måste jag ha några komponenter imellan?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Man kan tycka att en ICSP programerare skall
koppla bort sig själv helt automatiskt, men jag vet inte
hur K150 fungerar (den Wisp628 jag säljer har inga
problem med detta).

Kolla så att det inte finns något "kommando" till
programmeraren för att "släppa" pinnarna.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Jag börjar tro att denna programmerare blivit helt kass..

Kretsen funkar att programmera var tionde gång. Lite tråkigt när man sitter "utvecklar". De få gånger jag väl får i programmet så funkar det kalas.

Sodjan: Vad menar du med kommando? I programmet till programmeran?
Du har inte funderar på att börja sälja USB-programmerare förresten?
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Wow, nu funkar den nästan var tredje gång.

Icecap: Din funktion funkade riktigt bra. Stort tack igen!

Men hur gör jag om jag vill skriva in värdet binärt när jag använder funktionen?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Vad menar du med kommando? I programmet till programmeran?

Ja, t.ex.

> Du har inte funderar på att börja sälja USB-programmerare förresten?

Wisp628 fungerar alldeles utmärkt via en USB port.
Vad är det du är ute efter för funktion ?

> Men hur gör jag om jag vill skriva in värdet binärt när jag använder funktionen?

(C är inte mitt bord, men...) Vad menar du med "skriva in" ?
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Verkar inte finnas några sådana kommandon.

Den funkar via en USB-port om man kör en USB-COM-adapter ja? Tänkte mest slippa köpa en sådan..

Menar så att jag kan skriva tex Send_Out_Word(0000000011111111) istället för Send_Out_Word(255) som jag gör nu.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Prova
Send_Out_Word(0b0000000011111111)

Fungerar dock bara på vissa kompilatorer.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Hittade det precis i manualen (jo, jag borde läsa den lite oftare).

Precis som cykze sa.

Tack alla för, som vanligt, bra service :)
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

GICH! (Glad I Could Help)

Send_Out_Word(255); // Duger bra
Send_Out_Word(0xFF); // Duger bra det med
Send_Out_Word(Tabell[x]); Duger helt fint också
Send_Out_Word(0b0000000011111111); // Duger tydligen också
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

En annan grej:
Någon som vet var jag får tag på ett 16-bitars parallell-out-shiftregister med "Output Enable"? Gärna i SOIC också :)

Tacksam för svar.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Hittade SN54LS673 från TI. Verkar lovande..

Men var får jag tag på den i Sverige?
Skriv svar