Gå til innhold

Diverse elektronikkprosjekter på gang


Anbefalte innlegg

Hva gjør du her ?

 

"

 

DDRA |= (1 << PA0) | (1 << PA1) | (1 << PA2) | (1 << PA3);

DDRB |= (1 << PB0) | (1 << PB1) | (1 << PB2);

"

 

Kan ikke avr koder.. Kun C og litt annet..

 

Dette er C.

PA* og PB* er parametre fra en header fil. De beskriver hvilke bit i registrene som kontrollerer en bestemt funksjonalitet. Om jeg ikke tar helt feil så er PA0 = 0, PA1 = 1, osv.

 

DDR* er et register i kontrolleren (Data Direction Register A/B).

 

<< betyr skift til venstre, så 1 << PA0 er 1, 1 << PA1 er 2, 1 << PA3 er 4, osv.

| er logisk eller, så 1 | 2 | 4 blir 7 (ikke +, du må tenke binært her)

|= er logisk eller med venstre og høyre side som argumenter, og svaret lagres så i venstre side igjen.

Lenke til kommentar
Videoannonse
Annonse

Hvilken størrelse er det der da? 0603? Går som regel greit å lodde det, er for det meste det jeg bruker i dag i alle fall (der det er mulig). Har sett folk lodde 0402 for hånd også, men da begynner det å bli vanskelig. Trenger mikroskop for å få det ordentlig til da.

Neida, er 0805, ikke sinnsykt smått med andre ord. Blir mitt første forsøk på smd men skal vente på motstandene som skal i serie med lysdiodene før jeg setter igang.

 

Vurderer å bestille en ordentlig loddestasjon, hakko 936 eller lignende, fant en plass til ca 80 dollar, men de skulle ha 50 dollar i frakt. Vi får se, har lyst på et oscilloskop også.

 

helloworlde.png

Fikk uart til å funke! :D

 

-

Kolbjørn

Lenke til kommentar

Kom pare på at jeg hadde en litt mer fancy måte enn hva du brukte her for å traversere stringen din og for å sende den. Mener det var noe slikt:

 

void print_string(uint8_t* str) 	//print string
{
  while (*str)
     barrel(*str++); //hadde vell kalt den for put_char() eller noe jeg da...
}

... en plass i main() ...

char text[] = "hello world\n\r";
print_string(text)

 

Kanskje ikke store forskjellen, men du slipper å holde orden på hvor lang stringen er, du trenger ikke ha noen ekstra buffer, og du kan gjenbruke samme funksjonen for alle stringene du skal sende. Hvis du ikke kan å bruke pointere i C, så er vell nå tiden å lære det :)

 

Her blir ikke stringen sendt til funksjonen print_string, men bare en referanse til hvor starten på stringen er. Hadde hele stringen blitt sendt ville det ført til stor RAM bruk siden stringen hadde blitt kopiert i RAM. Dette kan en unngå med pointere. Stringen er avsluttet med null, så funksjonen slutter når stringen er slutt.

 

En kan også få stringen til å ligge i flash hele tiden, og en trenger da bare en pointer til det området. Dette kan spare enda mer RAM, men denne stringen vil da selvfølgelig være statisk og kan ikke forandre verdi (Mer nyttig for oppslagstabeller o.l. en skal vil ha i programmene sine)

 

Trur det var noe slik:

 
const char text[] = "Hello World\n\r";

 

Uansett, pointere er noe du bør se på om du ikke har gjort det. Du får nok bruk for det før eller senere :)

Lenke til kommentar

Hvorfor vil du bitskifte PAx og PBx, hvorfor skal resultatet av denne skiftingen bestemme DDRA og DDRB?

 

Hmm.. Må vel snart sette meg inn i AVR-verden.. Men arduino holder for meg enn så lenge..

Greit å ha andre til å lage funksjoner for meg.

Det er vel slik at bit'ene i DDRx registeret bestemmer om en pinne skal være utgang eller inngang, avhengig av verdien. Og da er jo det en enkel måte å definerer dette på.

Lenke til kommentar

Hvorfor vil du bitskifte PAx og PBx, hvorfor skal resultatet av denne skiftingen bestemme DDRA og DDRB?

 

Hmm.. Må vel snart sette meg inn i AVR-verden.. Men arduino holder for meg enn så lenge..

Greit å ha andre til å lage funksjoner for meg.

For å sette en port som utgang setter man den respektive bit-en i data direction registeret(DDRA, DDRB...DDRn), dette kan gjøres slik:

DDRA = 0x02;   //binært: 0b00000010

eller slik:

DDRA = (1 << PA1); //binært: 0b00000010

 

Nå er pinne PA1 satt som utgang og resten av DDRA pinnene som innganger, dette er litt knot hvis du ikke er interessert i å forandre på de andre portene, derfor bruker vi en "eller":

DDRA |= (1 << PA1); //det samme som DDRA = DDRA | (1 << PA1);

hvis DDRA er 11100100, og vi vil slå på PA1 blir det 11100100 | 00000010:

11100100
00000010
--------
11100110

En "eller" vil slå sammen to verdier, sluttresultatet er at en bit er 1 hvis en av innbit-ene er høye.

 

Muligens en smule rotete forklart, men håper det ble litt forståelig iallefall.

Lenke til kommentar

Ny utgave av tiny24 headeren:

 

headerpt3.jpg

 

Mest laget som en øvelse i smd-lodding, jeg får ikke laget ferdig kortet pga manglende deler(10k pullup, nå smd. Bypass cap, også smd), regner med rundt en måned leveringstid fra kina.

Dette er forresten mitt andre forsøk, da det første ikke er presentabelt i det hele tatt :D

 

Legg også merke til den noe hårete boringen, knakk to 1mm bor mens jeg holdt på... Merkelig nok er det 1mm som det går mest av, ikke 0.8mm.

 

-

Kolbjørn

Lenke til kommentar

[quote name='CoolBeer' date='19. august 2010 - 20:29' timestamp='1282242554'

Legg også merke til den noe hårete boringen, knakk to 1mm bor mens jeg holdt på... Merkelig nok er det 1mm som det går mest av, ikke 0.8mm.

 

Har du stativ eller borer du for hånd? Gått over til å bruke CNC maskina jeg kjøpte meg jeg da... Kjøpte et sett med bor i mange størrelser, trur det størst er ca 1mm stort, det minste ca 0,2mm kanskje :p Trur jeg har knekt 3 bor før jeg begynte å bruke den, og ett etterpå med maskina, glemte å justere høyden, så maskina gikk sideveis med boret nede i kretskortet :p

Lenke til kommentar

Har du stativ eller borer du for hånd? Gått over til å bruke CNC maskina jeg kjøpte meg jeg da... Kjøpte et sett med bor i mange størrelser, trur det størst er ca 1mm stort, det minste ca 0,2mm kanskje :p Trur jeg har knekt 3 bor før jeg begynte å bruke den, og ett etterpå med maskina, glemte å justere høyden, så maskina gikk sideveis med boret nede i kretskortet :p

Aye, en CNC maskin hadde vært flott, mistenker at det er litt utenfor mitt foreløpige budsjett, vurderte å se etter en Dremel 335(plunge router), får den for ca 400 kr på ebay.

 

Fikk også en trafo ifra electrokit.se, en 12-0-12 2x2A, spenning ferdig filtrert ble på ca. +-17.5, satt det på TL072-en i cmoy-kretsen, mye bedre resultat, så lenge jeg holdt breadboardet litt unna trafoen...

 

-

Kolbjørn

Lenke til kommentar

Måtte ta en liten pause fra den digitale verden, så jeg slengte opp ett printkort av 9v strømforsyninga jeg holder på med.

 

 

sideview2.jpg

 

sideview.jpg

 

topviewd.jpg

 

 

Trim-potmeteret som kan ses i det ene hjørnet er på 1k det er koblet i serie med en 1k motstand mot jord, så LM317-en har 1-2k mot jord. Mellom adj og ut har vi 240 ohm, den og en 240 ohm på kapasitansmultiplikatoren er for anledningen smd, loddet på andre siden av kortet.

 

Jeg målte spenningene ved ytterkantene av trim-potmeteret:

 

voltages.jpg

 

 

Ting jeg ville forandret er plasseringen av TIP142-en, det er den transistoren som står bak den store kondensatoren, er litt herk å komme til skruen der. En annen ting er monteringshull, disse glemte jeg rett og slett av i farta... Utenom det er jeg ganske fornøyd, vi får se hvordan den presterer i bruk.

 

-

Kolbjørn

 

EDIT: Noen kondensatorer er også litt nære ene kjøleribba, varmen vil smitte over på kondensatorene og levetiden på de vil gå ned.

Endret av CoolBeer
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...