Koppla microcontroller

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
BennyOrm
Inlägg: 17
Blev medlem: 24 oktober 2006, 14:27:25
Ort: Leksand

Koppla microcontroller

Inlägg av BennyOrm »

Hej,
följande program är bränt på en PIC16F873:
Vad gör programmet och hur koppplar man på en breadboard för att testa det?

Kod: Markera allt

#include <pic.h>
char dot, x;
main() {
       TRISB=0x00;
       while(1) {
                dot=0x01;
                for(x=0;x<8;x++) {
                        PORTB=dot;
                        dot=dot<<1;
                }
       }
}
Seven11
Inlägg: 547
Blev medlem: 13 maj 2004, 23:43:33

Inlägg av Seven11 »

är detta en skoluppgift???? det verkar iaf så... och därför kommer jag inte ge dig något färdigt schema men jag kommer förklara lite kort hur det funkar så får du göra resten själv.

koppla upp PIC:en enligt vilken grundkoppling som helst + lysdioder kopplade (med strömbegrännsningsmotstånd) till varje pinne till PORTB. När du kör in programmet kommer du se att lysdiod #1 (på pinne PORTB.0) tänds därefter #2 (på pinne PORTB.1) och så håller det på till #8 (PORTB.7) för att sedan börja om med #1. Dock kommer det gå så snabbt så du ser det nog som om alla tänds samtidigt...
BennyOrm
Inlägg: 17
Blev medlem: 24 oktober 2006, 14:27:25
Ort: Leksand

Inlägg av BennyOrm »

Jag har gjort ett större projekt som jag vill testa på en breadboard, men måste först lite snabbt ta reda på hur ett enkelt program kan testas. Inget fusk alltså..
Med kondensatorer borde det gå att sakta ner förloppet så att det går att följa enklare väl?
Användarvisningsbild
Icecap
Inlägg: 26618
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

"Med kondensatorer borde det gå att sakta ner förloppet så att det går att följa enklare väl?"

Hur??? Om du kan sänka klockans hastighet nog kan du se de enkla stegen men om du ska göra det med en konding (om du använder RC-oscillator) eller hur beror ju på inställning, datablad osv. Jag har för mig att kondensatorn i en RC-klovka inte får vara för stor, alltså kan man öka motståndet istället.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Varför inte bara göra det långsammare i mjukvaran?? Måste vara enklast.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag har gjort ett större projekt som jag vill testa på en breadboard,...

Och sen frågar du hur ett program med mindre än 10 rader fungerar ???

Kom igen...
BennyOrm
Inlägg: 17
Blev medlem: 24 oktober 2006, 14:27:25
Ort: Leksand

Inlägg av BennyOrm »

Ett ganska stort program i c som funkar bra och som jag ska lägga över på en microcontroller (som jag inte varit i kontakt med tidigare). Har inte koll på portar etc.. Konstig inställning här ifrån vissa..
Användarvisningsbild
JimmyAndersson
Inlägg: 26453
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Du skulle nog få bättre svar om du berättade lite mer. :)

Du har alltså gjort ett stort projekt i C till en microcontroller. Rätt?
Hur har du lyckats med det utan att "ha koll på portar etc" ?
BennyOrm
Inlägg: 17
Blev medlem: 24 oktober 2006, 14:27:25
Ort: Leksand

Inlägg av BennyOrm »

Jag har programmerat en simulator för ett trafik-system i c som fungerar. Som utsignaler har jag vektorer som skrivs ut på skärmen. Nu ska jag överföra detta till en microcontroller och få utsignalerna som lysdioder istället. Därför la jag in ett litet exempel för att komma igång.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Själv skriver jag aldrig särskilt många rader kod utan att deltesta imellan så att man inte gjort någon liten tabbe som sedan fortplantar sig i koden,

Och hur kan du skriva ett *större* program utan att veta hur portarna fungerar?

Vad är det annars för fel på förklaringarna som har kommit i tråden? Seven11 förklarade hur du skall koppla, och jag skrev en fortsättning som sade att det enklaste för att se vad som händer är att skta ner "koden".
Vad är det du inte förstår?
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

BennyOrm skrev:Jag har programmerat en simulator för ett trafik-system i c som fungerar. Som utsignaler har jag vektorer som skrivs ut på skärmen. Nu ska jag överföra detta till en microcontroller och få utsignalerna som lysdioder istället. Därför la jag in ett litet exempel för att komma igång.
Alltså har du _inte_ programmerat microcontroller i C ännu? Ok, tur att du har fått svar på dina frågor änsålänge här då. Då är det bara till att fortsätta kämpa på.
Tänk på att C för PC och C för mikrokontroller skiljer extremt mycket, det enda som är likt är syntaxen.

EDIT: Syntaxen inte sydtaxen
Senast redigerad av björn 24 oktober 2006, 17:12:36, redigerad totalt 1 gång.
Användarvisningsbild
JimmyAndersson
Inlägg: 26453
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Nu blev det genast glasklart. :)

Läs databladet för PIC16F873 (speciellt sidorna om PORT och Device Overview.) Kika sedan på andra halvan i Seven11's inlägg igen. Har det inte blivit klarare då så är det bara att fråga. :)
BennyOrm
Inlägg: 17
Blev medlem: 24 oktober 2006, 14:27:25
Ort: Leksand

Inlägg av BennyOrm »

Inga fel förutom slodjans kommentar.. Det jag inte förstår är hur variablen dot skiftas (för det är väl det den gör?) samt hur man ska koppla det..
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Kod: Markera allt

dot=dot<<1
Gör en vänsterskift ett steg, << betyder just "skifta vänster".

Googla texpå "C operator bitshift"

EDIT: om din byte ser ut 00000010 innan skiften kommer den at se ut som 00000100 efter skiften osv.
BennyOrm
Inlägg: 17
Blev medlem: 24 oktober 2006, 14:27:25
Ort: Leksand

Inlägg av BennyOrm »

Det är jag med på. Men betyder det att PORTB kommer vara först 0000 0001, sen 0000 0010 osv, och betyder det i sin tur att PORTB:s olika pins kommer ändras i enlighet med det (0000 0001 ger RB0=1 etc)??? Och kan jag då ha en lampa för varje pin så att ljuset kan "vandra"?? Eller är jag helt ute och cyklar?
Skriv svar