Sida 1 av 2

Egen PC Mjukvara för styrning av PIC

Postat: 17 mars 2008, 18:56:49
av Jeppsson
Hej!

Bakgrund
Jag har ett litet PIC projekt baserat på en PIC18F2320 som pratar men en PC via RS232. Koden till PICen är skriven i mikroC och fungerar som den skall.

Så då var jag tvungen att ge mig in i att börja skriva koden till programmet som skall rulla på själva PCn.

Jag har varit på gång flera gånger att börja lära mig programmera i Windows men aldrig fott foten loss... Från nu! :)

Efter kollat runt lite så bestämde jag mig för att börja med att försöka programmera i Visual C# 2008 Express Editon.

Måste bara säga att det är väldigt likt mikroC och att det är super lätt att komma igång med.

Så långt som jag har kommit i programvaran nu så kan jag skicka och ta emot få PICen och även få PICen att bete sig som jag vill till stordel.

Behöver hjälp med!
Men det som jag inte kan få till på ett bra sätt i C# är hur går man in och kontrollerar individuella bitar i en byte och påverkar dom om man vill?

Alltså både kontrollera bits och påverka individuella bitar om man så vill.

Om ni inte kan koden för C# men för något annat liknade som C++ eller VB så skriv gärna den koden så kanske jag kan konventer den eller hitta liknande funktioner i C#...

Tack på förhand!

Projekt tråd kommer... :)

Postat: 17 mars 2008, 19:12:17
av exile
i C använder man | (or) eller & (och) när man manipulerar bitar
Exempel:

test |= (1<<5); //sätter bit 5
test &= ~(1<<4);//clerar bit 4

if( (test & (1<<5) ) ) { ... } //testar om bit 5 är satt

if( !(test & (1<<4))) { ... } //testr om bit 4 är cleard


Så det bör fungera i C#..... ^^

Postat: 17 mars 2008, 19:18:41
av H.O
Hej Jeppson,
Låt mig börja med att säga att jag kan nada om C, C#, och C++ men ett sätt att kolla om en enskilld bit är satt är göra en AND med den önskade bitens "värde".

Alltså, säg att värdet på din variabel (A) är 12 och du vill veta om bit 2 är satt. If A AND 4 = 1

Om du vill sätta en enskilld bit utan att påverka andra bitar så gör du A = A OR 4.

Exakt hur syntaxet ser ut för det här i C# borde du kunna hitta i hjälpen/MSDN.

Postat: 17 mars 2008, 19:28:21
av thepirateboy
Man kan använda mycket av den vanliga C-syntaxen även i C#, men det finns även vissa skillnader. Är det nåt speciellt du undrar över?

Postat: 17 mars 2008, 19:35:00
av Icecap
Jag har inte kollat om C#" skiljer sig från C på det punkt men man kan deklarera såhär:

Kod: Markera allt

union
  {
  struct
    {
    BYTE B0 : 1; // Betyder att storleken är 1 bit
    BYTE B1 : 1;
    BYTE B2 : 1;
    BYTE B3 : 1;
    BYTE B4_7 : 4; // Är 4 bit stor
    } Bit;
  BYTE B; // Hela byten
  } The_Byte;
Man kan komma åt dessa variabler på olika sätt, först hela bytes:
The_Byte.B

Sedan de enstaka bits eller samlingar av bits:
The_Byte.Bit.B0
The_Byte.Bit.B1
The_Byte.Bit.B2
The_Byte.Bit.B3
The_Byte.Bit.B4_7

Postat: 17 mars 2008, 20:00:16
av spaderkung
När jag skrev ett VB-interface till Siemens PLC-simulator upptäckte jag att MS egen dokumentation om Visual Studio är rätt så omfattande. Den kan kanske vara bra som referens:

http://msdn2.microsoft.com/sv-se/librar ... n-us).aspx

Postat: 17 mars 2008, 20:26:36
av sodjan
Kolla här :
http://www.cwu.edu/~iet/programs/eet/co ... /11037.htm

"Communicate with PIC16 and PIC18 MCUs via the PC serial port"

Postat: 17 mars 2008, 20:34:53
av LHelge
Du kan hitta mycket värdefull information på MSDN, vad gäller operatorer så är detta en bra utgånspunkt:

http://msdn2.microsoft.com/en-us/librar ... S.80).aspx

De operatorer som är nyttigast vid bitmanipulering är:

& Logisk AND
| Logisk OR
^ Logisk XOR
>> Shift right
<< Shift left

Postat: 17 mars 2008, 22:20:21
av Jeppsson
Jag tackar så mycket för hjälpen...

Det är precis var jag har sökt efter!

Skall knacka lite kod senare idag/morgon och åter kommer med resultat!

/ Jeppsson

Postat: 7 april 2008, 22:49:23
av Jeppsson
Den logiska hanteringen fungerar bra...

Men nu har jag en annan fråga, finns det något enkelt sätt att i C# omvandla från t.ex 6000000 Hz till 6000 kHz eller 6 MHz eller måste jag skriva egna rutiner för det?

/ Jeppsson

Postat: 7 april 2008, 23:43:06
av sodjan
Omvandla? Det är ju exakt samma sak...
Eller hur menar du ?

Postat: 8 april 2008, 06:58:53
av Jeppsson
Jag menar att istället för att skriva ut 6000000 Hz så blir det enklare att läsa om det står 6 MHz istället och det tar också mindre plats på skärmen där det redan är trångt.

Det är allså till för att det skall kunna presenteras enklare på skärmen. Värdet kommer att variera.

Postat: 8 april 2008, 08:47:57
av Icecap
Det är en sak du får göra själv.

Postat: 8 april 2008, 13:21:20
av sodjan
Plocka bort nollorna och lägg till ett "M"...

Postat: 8 april 2008, 14:19:14
av blueint
Investera tid i C# låter jättebra tills M$ får nycker att byta till något annat.. Hellre riktig C.