Nu har jeg selv haft computer i nogle år, og jeg kan da godt finde ud af at programmere, så jeg overvejer at prøve at programmere en mikrochip. Jeg har prøvet det før, men det er længe siden, og vi fik næsten ingenting at vide. Vi lærte bare at bruge et program, der vist nok hed Flow Code. Men hvis jeg skal programmere en mikrochip, kræver det dels det rigtige udstyr[1], og så kræver det en god portion af hardware-viden[2], som jeg absolut ikke er i besiddelse af.
[1] Hvilket udstyr skal jeg bruge? Hvilken type/model bør jeg starte med? Hvordan ved jeg, hvad der er godt nok til mit formål? Hvilket stykke software er bedst til at lave Assembly-koderne til chippen? Hvordan skal jeg forbinde den til computeren (har en bærbar, og så skulle parallel vist være det bedste - men hvad betyder det egentligt?)?
[2] Hvad er RAM (mere end Random Access Memory)? Hvad er Flash memory? Hvad er Cache? Hvad betyder hastigheden (Hz)? Hvilke data vil ikke forsvinde fra chippen, når den ikke længere er tilsluttet strøm? Hvordan fungerer registers? Hvad er forskellen på de forskellige dele i computeren (CPU, MCU og hvad de ellers hedder), især chipsne?
Grunden til, jeg spørger, er dels at jeg gerne vil vide det, men også at når man nu kigger på eksempelvis en Intel i7-980x Extreme Processor 32nm 3.33GHz 12m Cache 6.40 Gt til omkring $1,000 (og jeg fatter jo intet af specifikationerne) og de små mikrochips (PICs hedder de vist) til små $10, falder jeg af. Hvorfor er Intel'en så meget dyrere? Det burde vel kunne laves utroligt meget billigere ved at programmere og forbinde flere af de billige eller hvad?
Ja, der var mange spørgsmål, for jeg er helt på bar bund. Hvis du ikke føler for at bidrage til alle, er det ganske fint. Jeg deler pointene ud bagefter efter hvor godt og hvor mange spørgsmål, der er besvaret.
At en ny Intel CPU er meget dyrere end en microcontroller skyldes naturligvis at Intel'en kan meget mere og er meget større og koster meget mere at producere og udvikle. En moderne Intel CPU er >1000 gange hurtigere end f.eks. en ATmega8 microcontroller.
Den slags programmering du hentyder til er ikke passende for en stor Intel CPU - det du sigter efter er tydeligvis en microcontroller, som kan være vældigt fornøjelige at lege med, fordi man virkelig har fat i det helt grundlæggende.
Du bad om en forklaring til nogle udtryk:
Hz: angiver (groft sagt) hvor mange instruktioner chippen udfører hvert sekund. RAM: hukommelse som "glemmes" når strømmen går Flash: lidt ligesom RAM, men forsvinder ikke når strømmen går EEPROM: lidt ligesom flash, men chippen kan ikke selv slette indholdet
I en mikrocontroller bruges EEPROM og flash som regel til at gemme programmet, og RAM bruges til variable osv.
Du kan få microcontrollere til $2 - $3 i små styktal, f.eks. ATmega8. Disse har som regel både RAM, flash og EEPROM.
Der er uhyre store foreskelle på ydelser mellem en PIC som ofte kører 8MHz, hvor en 3,33GHz CPU altså klarer ca 415 gange så mange beregninger, og så fungerer den sikkert mere effektivt, så det er sikkert væsenligt mere. Ydermere er der nogle begrændsninger i hvor mange bit de kører ift hinanden, hvilket begrændser mængden af hukommelse du kan tilslutte en PIC, for slet ikke at snakke om at hvis du vil have 415 PICs til at snakke sammen, skal du have lavet et ret voldsomt setup for at fordele opgaverne, hvilket i sig selv vil begrændse ydelsen voldsomt, grundet en meget begrændset kommunikationshastighed, osv osv osv... Ovenstående vil iøvrigt kun matche i rå tal 1 ud af de 8 kerner intel processoren har, så du skal nok op på omkring 3330 8 MHz PICs bare for at have muligheden for at kunne håndtere samme datamængde pr. sekund - og igen vil båndbredden begrændse dig voldsomt, så der er no way du med PICs kan matche en CPU til computeren, uden at have et eller andet voldstomt system foran til at fordele opgaverne, hvilket vil være endnu en flaskehals.
Jeg ved ikke hvor god styr du har på elektronik, men jeg vil anbefale at du kigger på en PSoC (Programmable System on a Chip) som faktisk er en hel 'computer' på en chip. Det betyder at den indeholder RAM, Flash, CPU, og diverse andre ting, alt efter hvad man har brug for.
RAM er som du selv skriver Random Access Memory. Når du afbryder strømmen fra RAMmene, vil alt data der ligger i dem forsvinde. Data man lagrer i form af flash, bliver gemt, selv når du tager strømmen. Flash memory er samme type hukommelse som de fleste USB-nøgler benytter.
De fleste enheder i dag bruger en seriel port (fordi den minder meget om UART/USART/I2C interfacerne), mange developer-kits har en USB-konverter med, ellers plejer man at kunne købe noget i den retning.
Hvad vil du bruge det hele til? Jeg spørger, for det er en jungle uden lige.
MCU = Microcontroller Unit PSoC = Programmable System On a Chip PIC = Peripheral Interface Controller ARM = Acorn/Advanced RISC Machine CPU = Central Processing Unit
ARM er nogle særdeles gennemtestede og veludviklede chips. ARM er en slags CPU, men denne 'CPU' er ofte integreret ind PSoC chips, hvilket gør det ret 'simpelt' at lave hele systemer med meget færre kompnenter.
Det ofte SoC'ere der bliver brugt i mobiltelefoner tablets, og andre håndholdte enheder, så der findes i forvejen et have af styresystemer der kan bruges med ARM SoC'ere
Du kan i bunden af det følgende link finde noget om de forskellige typer, og mere grundig viden om det hele: http://en.wikipedia.org/wiki/MCU
@noltus Jeg kigger på siderne. De har da noget at vælge imellem, så der kan jeg måske finde noget underholdende :)
@HBP2 @ggxdg Tak for forklaringerne. Ja, jeg ved ikke helt, om jeg har brug for en Microcontroller eller en CPU, jeg vil bare være i stand til at programmere komponenten. Jeg havde den mærkelige idé, at det kunne være ret fedt at lave sin egen CPU. Den skal ikke nødvendigvis kunne klare samme mængder data på samme tid som en computers CPU, men den skulle kunne klare noget selvfølgelig. Min tanke var at forsøge at lave den (med alle komponenterne sat sammen rigtigt), og så programmere den til at kunne forstå ganske simple kommandoer - ligesom Assembly, bare niveauet højere. I stil med C, og så bare tusinde gange simplere. Jeg ville gerne kunne programmere mine egne datatyper direkte ned i CPU'en/Mikroprocessoren. Jeg ved, det er lidt en underlig idé, men i dag blev jeg pludseligt ramt af den tanke, at det da er åndssvagt, at alle numeriske datatyper har begrænsninger (short, int, long), når en string og specielle arrays er generic og bare tager mere plads som nødvendigt. Så det var egentligt grundtanken. Sådan for at illustrere lidt, ville jeg gerne kunne give min chip en kommando som "int1024(...)*int2048(...)". Jeg ved det er latterligt høje tal, vi snakker om, og at det godt kan omgås til en vis grad med high level-programmeringssprog. Men jeg ville nu gerne prøve at lave det fra bunden af. Eventuelt lave noget simplere - bare mere end at give den rå Assembly-kommandoer. Det lyder totalt skørt, og det er det nok også, for jeg vil ikke bruge det til noget praktisk. Bare sjov.
Ikke for at tage modet fra dig - men glem det med at forsøge at lave din egen processor. Der findes godt simple open-source processor designs som du kan kigge på, men jeg kan sige dig med det samme at du aldrig får dit eget design til at virke. Specielt det med dine egne datatyper er helt urimeligt ambitiøst og urealistisk!
Om du skal bruge en CPU eller en microcontroller afhænger jo af hvad du har tænkt dig at lave.
Nej - det at lave en computer af den kaliber som du snakker om (i hvert fald assembly delen) burde da sagtens kunne afvikles på en 8 eller 16 MHz cpu.
I bund og grund vil nu nok ende med noget i samme stil som f.eks commedore 64 :P
Men der kan du brænde data på en ROM, eller noget flash eller noget, have nogle RAM osv.
Der er nogsle få der har givet sig i kast med noget i samme stil, rundt om på internettet, og jeg har tænkt samme tanke (altså, at det kunne være sjovt at bygge sin egen computer, selv om den ikke ville være i stand til noget som man ikke kan få i en SoC eller MCU-pakke i dag :P
@HBP2 Du behøver ikke at bekymre dig om, om jeg nogensinde bliver færdig, eller om det kommer til at fungere. Jeg har før givet mig i kast med projekter, der er langt større end det. Men jeg kunne nu alligevel godt tænke mig at vide, hvorfor du siger sådan. Jeg læste i går om, hvordan Intels processorer er lavet - og nej, det kan jeg ikke. Det kan jeg godt se. Så fint maskineri har jeg ikke til rådighed. Men Assembly-delen er den nemme del af det, det kræver bare tid og nogle gode idéer - og så kan jeg jo fraregne al den tid, jeg skal bruge på at sætte sig ind i syntaks, optimering og så videre, for jeg kan godt programmere. Med det, jeg har prøvet, er det forholdsvist let at give sig i kast med et nyt sprog.
@ggxdg Når du siger en 16MHz cpu, hvad er så den grundlæggende forskel på den og en mikroprocessor med samme hastighed? Jeg kan næsten forestille mig, du vil anbefale en ARM, eventuelt i en PSoC, men hvilken bør jeg så vælge? Og kan jeg på nogen måde slutte den sammen med ekstra kapacitet, hvis jeg får brug for det? En typisk programkode kan jo kun fylde omkring 512 eller 1024 KB, og hvorvidt jeg kan lave en compiler (til simple koder) på så lidt, betvivler jeg. Men en aldmindelig computer fungerer jo ved, at den i startkoden giver kommandoen videre til et andet stykke kode - dette vil i givet fald være min compiler. Og den skal læse dens koder (dem på niveauet højere) et sted fra, hvor kan jeg lægge det? Og hvor skal compileren ligge?
Jeg ved ikke hvad du mener med "assembly-delen" - assembler har ikke noget at gøre med at designe en CPU/chip/microcontroller, assembler er blot en "nem" måde at indtaste de instruktioner som udgør et program.
En af de enkleste CPUer er 6502 som netop er blevet "reverse engineered", se http://www.visual6502.org/ og se hvor meget der skal til for at lave en simple 8-bit processor - meget simplere end de microcontroller som ellers er blevet nævnt.
For nu af svare på det du spørger ggxdg om: Der er ingen forskel på en CPU og en mikroprocessor, eller en microcontroller for den sags skyld. En microcontroller er blot en CPU med lidt hukommelse/porte/kontrol-ben/tingogsager indbygget. En system-on-a-chip (SoC) er blot en STOR microcontroller. En microcontroller/SoC er at foretrække da du så slipper for at skulle lave en "bus" til hukommelsen og en anden bus til I/O (seriel port, reset-knap osv.).
Du kan finde microcontrollere med en del hukommelse, ATmega256. Eller ARM boards som egentlig er komplette computere som ofte kan køre Linux. Men selv til microcontrollere findes der assemblere og C kompilere. Kompileren kører på din normale PC og det færdige program "brændes" derefter i microcontrolleren.
Ja... Med assembly-delen, mener jeg at jeg straks tænker små lette opgaver når jeg hører "assembler", men assembler bruges vel også til større enheder, så det giver ikke meget mening nej :P
Alt der har et I2C/UART/USART interface kan næsten udvides med så meget flashmemory som du ønsker (man kunne måske endda sætte en harddisk til, men så meget styr har jeg ikke på det, og det er nok også noget mere end hvad du spørger om), alt efter hvor meget man gider at smide i halen på den, det kræver muligvist en controller eller noget, men muligheden er der.
Der er mange developer kits i dag der kommer med et SD eller uSD card-slot, så du er klar til at udvide fra starten.
Undskyld til jer, der får en mail om dette oldgamle spørgsmål nu. Hvis I vil have et svar, kan I smide et, og så deler I pointene. Hvis I ikke gør, så lukker jeg selv spørgsmålet senere og tager pointene selv :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.