Hallo allemaal,
Met uC's werk je vaak met bit's en bytes. Ik weet alleen niet wat het inhoud:'(
Ik programmeer met basic en ik heb het nooit nodig gehad. Tot een keer dat ik een klok wilde maken en een real time clock wilde gebruiken voor de tijd. Ik dacht, dat doe je even maar ik snap er niks van!!!
Oke, wat ik wel weet is dat een bit een 1 kan zijn of een 0. dus 5V of 0V. De meeste real time clock IC's gebruiken pakketjes van 8 bit's. Dit heet een byte. Oke gelijk een vraag erover. Hoe weet ik wanneer een nieuw serie met 8 eentjes en nulletjes langs komt. Nog een vraag hoe is een serie bit's opgedeeld? Heb je tussen de 1 en de 0 nog een stukje pauze? en wat nu als alle bit's laag zijn? dan zou eem gedurende periode de ingang van de uC laag zijn. Dan weet je niet wanneer een nieuwe bit begint. En hoelang is een bit 0 en hoelang is een bit 1 en hoelang is de eventuele pauze die ik hierboven beschreef?
Ben ik nu zo dom dat ik niet kan vinden wat dit allemaal precies inhoud? Zie ik iets vreselijk over het hoofd?
mvg Jan Bot
elektron_
beetje gek
parallel =alle bits staan naast mekaar.
Serieel = serieel protocol;
google met een van deze lijnen:
Google:
asynchrone "data bits" baudrate
synchrone clock data
"manchester encoding"
UART
[Bericht gewijzigd door elektron_ op ]
even een paar dingen:
1 bit is inderdaad aan/uit, hoog/laag, 5V/0V etc etc. Het is de eenheid in het binaire talstelsel
4 bits vormen samen een 'nibble'. Met 1 nibble kun je dus tot 1111 (bin), 0x0F (hex) of 15 (dec) tellen
8 bits (oftewel 2 nibbles) vormen een zgn 'byte' (komt van 'by eight' (sic!)), daarmee kun je tot 11111111(bin), 0xFF (hex) of 255 (dec) tellen
2 bytes vormen een 'WORD' en 4 bytes een DoubleWord (DWORD)
Even over seriele communicatie:
Er zijn grofweg twee vormen, synchroon en asynchroon. Bij synchrone data overdracht zijn er twee lijnen nodig voor de communicatie: DATA en CLOCK. De DATA lijn krijgt steeds het bit dat aan de beurt is aan zijn uitgang, en dan pulst de CLOCK lijn van laag-naar hoog-weer naar laag. De ontvanger kan dus aan de kloklijn zien wanner hij moet 'kijken' voor een echt (valide) bit.
Bij asynchroon wordt er met tijd gewerkt (RS232 bijvoorbeeld). Snelheid van de communicatie dient aan de zendende en aan de ontvangende kant te zijn ingesteld (baudrate genoemd: baud=aantal bitsignaal wisselingen per seconde. Baudrates zijn gestandaardiseerd: bijvoorbeeld 75,300,1200,2400,4800,9600,19200,38400 etc).
Het verzenden van een byte gaat als volgt: Eerst een startbit (van 0->1: kan de ontvanger zien dat er iets aan komt). Hierna in de juiste snelheid de databits (de ontvanger probeert steeds te 'kijken' in het midden van een bittijd) en verder nog een paritybit en/of een stopbit.
Ga maar eens even googlen op de eerder genoemde termen. Dan kom je wel verder... En anders zijn wij er altijd nog.
Groeten,
Da fripster
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Waar je mss op vastloopt: BCD, Binary Coded Decimal.
Das een manier om "gemakkelijk" in binaire code decimale cijfers te steken, en wordt veel gebruikt in RTC's. Hoe zit het nu:
Je hebt een byte, voor de minuten bijvoorbeeld, in een byte kan je tot 255 decimaal steken, maar je zal altijd onder de 60 blijven. Daarom gaan ze het eerste getalletje en het tweede getalletje apart zetten in de byte, dus de eerste 4 bits voor de tientallen, de laatste 4 bits voor de eenheden. Die groepjes van 4 bits gaan dus van 0 tot 9.
Voorbeeld: 31 minuten:
Eerste getal = 3 ==> '0011'
Tweede getal = 1 ==> '0001'
De byte voor de minuten wordt dan '0011001'. Begrijp je?
oke, nu wil ik toch een RTC datasheet erbij pakken voor de verduidelijking. Als ik uitga van de DS1302. Datasheet:
http://pdfserv.maxim-ic.com/en/ds/DS1302.pdf
Dan kijk ik op pagina 6. Ik zie daar dus een byte staan. Het is een groepje van 8 bits. nadat CE hoog is gemaakt kunnen er dus bit's worden verzonden of geschreven. Eigenlijk kan CE dus altijd aan de + worden gehangen. Of je schrijft of leest dat is afhankelijk van de eerste bit. Ik maak dan de clock ingang van de DS1302 hoog, daarna weer laag, dan maak ik de I/O van de uC laag. Vanaf dat moment kan ik lezen welke datum/jaartal etc de DS1302 mij te vetellen heeft.
Ik moet dus ook tellen welke bit aan de beurt is. Ik moet dan ook de 6e bit weer schrijven. Wat die bit moet doen snap ik niet helemaal.
Als je dan clock hoog en daarna weer laag maakt zal er op pin I/O van de DS1302 een bit binnen vallen. Dan kijk je met de PIC is de de ingang van de uC laag of hoog. Vervolgens doe je clock weer hoog en daarna laag, en dan kijk je weer of de ingang van de uC hoog of laag is. Dit gaan dan zo door. 15 bit's lang want de 16e bit maak je zelf hoog om te bepalen of je leest of schrijft.
klopt dit wat ik hier vertel?
Nu een vraag. Waarom nu die 8 bit's. Je gaat in 1 rits door dus waar hebben die 8 bit's op een rij nou mee te maken?
Ook hebben ze het vaak over schuifregisters. Wat houd dit nu weer in? Ook RAM is voor mij onbekend. Dan ga ik verder en zie ik tabel 2. Nu word mij alles toch echt heel onduidelijk. Zijn er nu dus heel veel bytes achter elkaar met informatie over de maand jaar en tijd ofzo?
En wat houden die adressen in? 91h enzo?
mvg Jan Bot
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Waarom 8 bits: waarom 4 wielen aan een auto, waarom 2 ogen op het hoofd van de meeste dieren,... Dat komt nu eenmaal zo goed uit. Tis een standaard, en het is handig die te volgen.
Een schuifregister is een componentje dat serieel naar parallel en omgekeerd kan gaan. Meestal zijn ze 8 bits breed (zie hierboven). Je hebt 8 parallele pinnen, en 2 seriële. Op die seriele zet je je data en klok, en bij elke klok schuiven de seriële bits netjes naar binnen (en ze komen zo netjes op de parallele uitgangen voorbijgeschoven), zo ga je van serieel naar parallel. Omgekeerd ga je als je gewoon parallel je data eraan hangt, en dan op je klok pulsjes gaat geven, dan komen op de seriele pin een na een de '1' of '0' van de parallele pinnen toe. De meeste seriele poorten (UART's) zijn voorzien van een schuifregister, omdat je dan gemakkelijker werkt (gooi er een byte in, en geef 8 pulsjes, dan is je byte verzonden).
RAM is geheugen, om tijdelijk dingen op te slaan. In je µP gebruik je ze ongetwijfeld, je variabelen zijn bytes van het RAMgeheugen, daar verander je aan wat je maar wil.
elektron_
beetje gek
Dit keuze van het aantal bits. Vroeger als computers alleen met letters en cijfers werkten heeft men een keuze gemaakt, hoeveel bits zijn er nodig ?
Voor telex bleek 5 een economische oplosssing, elke bit versturen kost tijd en de mechanische machines werden duurder voor meer bits.
(Later?) Voor andere systemen leek 8 bits ruim voldoende voor 255 mogelijke tekens. Dus 8bits werd de standaard en men noemde het een byte.
Meteen onstaat de asci table:
http://www.lookuptables.com/
en om ht niet gemakkelijk te houden hebben we meerdere standaarden, de ebcdic table.
http://www.legacyj.com/cobol/ebcdic.html
En meteen zijn er omzettingstabellen nodig:
http://www.room42.com/store/computer_center/code_tables.shtml
En de onwikkeling van omzettings boxen kon beginnen. De noodzaak was er, dus er werd veel geld voor neergeteld.
Zo is er ook een tabel voor de 5 bits
de Baudot table (telex), maar die gebruiken we normaal niet meer.
http://www.dataip.co.uk/Reference/BaudotTable.php
[Bericht gewijzigd door elektron_ op ]