Sida 1 av 4

C och skiftregister (PIC)

Postat: 20 januari 2006, 21:03:22
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

Postat: 20 januari 2006, 21:47:41
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
    }
  }

Postat: 20 januari 2006, 22:41:33
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?

Postat: 20 januari 2006, 22:45:08
av sodjan
Vad mäter du med ?
Vad är anslutet till pinnarna ?

Postat: 20 januari 2006, 22:53:05
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?

Postat: 20 januari 2006, 23:01:02
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.

Postat: 20 januari 2006, 23:10:05
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?

Postat: 20 januari 2006, 23:25:27
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?

Postat: 21 januari 2006, 00:29:29
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" ?

Postat: 21 januari 2006, 00:53:29
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.

Postat: 21 januari 2006, 00:56:16
av cykze
Prova
Send_Out_Word(0b0000000011111111)

Fungerar dock bara på vissa kompilatorer.

Postat: 21 januari 2006, 01:00:18
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 :)

Postat: 21 januari 2006, 07:51:16
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å

Postat: 22 januari 2006, 00:09:00
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.

Postat: 22 januari 2006, 00:17:22
av jack
Hittade SN54LS673 från TI. Verkar lovande..

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