C++ laserquest

Status
Niet open voor verdere reacties.
Ik zag dus op de avrtutor site dat hij een functie maakte voor een temperatuurmeter. Lijkt me toch dat dat hetzelfde idee is als mijn lichtsensor. Ik heb pin-6 van de lichtsensor aangesloten op PORTC, PC4. Ik krijg het gewoon niet voor elkaar om met behulp van de DispTempr() functie die poort uit te lezen......

Ik heb ook Vtg pinnen gevonden, ik tap daar toch correct nu de stroom vanaf?

Code:
void DispTempr (void)
{
    u8 decimal=0;
    u8 sign=0;
    s8 temprdisp=0;

    // mask decimal part, last 4 bits
    decimal = (u8)(tempr & 0x000F);          
    // mask sign, first bit
    sign = (u8)((tempr & 0x8000)>>15);
    // mask the integer part, 7 bits       
    temprdisp = (s8)((tempr & 0x07F0)>>4);

    if (decimal>7) temprdisp++;

    if (sign) temprdisp=-temprdisp;

    Display (temprdisp);
}

Ik zie ook dat hij de informatie naar Display() doorstuurt. Deze moet ik toch veranderen naar TxByte(temprdisp);
tempr is nergens declared, moet ik deze nu veranderen naar de PORTC pc4 poort?
 
Laatst bewerkt:
Ik zag dus op de avrtutor site dat hij een functie maakte voor een temperatuurmeter. Lijkt me toch dat dat hetzelfde idee is als mijn lichtsensor.

Lijkt mij niet. Een brommer en een fiets hebben beiden twee wielen, maar er zit een andere techniek achter. De temperatuur-sensor geeft een voltage uit die met een ADC wordt uitgelezen. Jouw lichtsensor geeft een frequentie uit. Deze dient vergeleken te worden met een andere frequentie om te bepalen of de sensor 'hoog' of 'laag' is.

Dus zoals ik al eerder zei: begin eerst maar eens met een klok maken (een pulsgenerator) waarmee je de frequentie kunt meten.


Ik heb ook Vtg pinnen gevonden, ik tap daar toch correct nu de stroom vanaf?

Ja prima

IIk zie ook dat hij de informatie naar Display() doorstuurt. Deze moet ik toch veranderen naar TxByte(temprdisp);
tempr is nergens declared, moet ik deze nu veranderen naar de PORTC pc4 poort?

Om het maar eens hard te zeggen: Je kunt niet zomaar een stuk code pakken, willekeurig dingen gaan veranderen en dan hopen dat het werkt.
De display-functie zou inderdaad compatible moeten zijn met de txByte functie, maar de rest is niet om te bouwen. Het spijt me zeer, maar je zult echt eerst wat kennis op moeten doen van bijvoorbeeld C. Heb je de datasheet van je uC al een keer doorgelezen? Hierin staat namelijk ook enorm veel informatie.
 
Beste Niek,

ik ben een beetje aan het stoeien met een breadboard. Ik probeer dezelfde schakeling te maken als op de stk500. Switches geconnect met PORTC en LEDS met PORTB.

Als ik de datasheet erbij pak vind ik de poorten, Vcc, ground enz. op de atmega168-20PU.

http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf

Als ik stroom op de atmega168 zet gaan alle LED'jes aan ook die van PC0. Zou je mij kunnen uitleggen hoe de stk500 werkt daarmee?

is het zo als ik de switch indruk dat hij dan een elektrisch signaal afgeeft?
Zijn de pinnen de GND voor de LED'jes?

Als ik de PB0 pin met de GND of pluspol aansluit gaan ALLE LED'jes uit/zachter branden.

Ik zal even uitleggen hoe ik bepaalde verbindingen heb gemaakt:
- LED's met de Kathode kant op de IC aangesloten. PORTB
- Switch aan 1 kant met de power supply aangelsloten, en andere kant met één van de PORTC pinnen
- Ik heb de C code van de stk op de atmega168 gezet, dus hij zou nu als ik de switch indruk op PC0, de led op PB0 aan moeten doen toch?

breadboard.JPG
 
Laatst bewerkt:
Beste Niek,
Als ik stroom op de atmega168 zet gaan alle LED'jes aan ook die van PC0. Zou je mij kunnen uitleggen hoe de stk500 werkt daarmee?

De STK500 werkt met zogenaamde pull-up weerstanden. Dat houdt in dat als de poort laag is (dus uit) de LED's aanstaan. Als de poort hoog is (dus aan) zullen de LEDS uit zijn. Ik heb me al eens een keer laten uitleggen waarom dit makkelijk was, maar ik kan het me niet meer herinneren :) Het had er mee te maken dat je op deze manier minder makkelijk de poort opblaast.

is het zo als ik de switch indruk dat hij dan een elektrisch signaal afgeeft?
Zijn de pinnen de GND voor de LED'jes?

Als je de switch indrukt, zou je eigenlijk verbinding moeten maken tussen de + (VTG) een de ingaande poort. Daardoor wordt de poort hoog (er komt 5 volt opte staan) en zal de microcontroller dit als 'hoog' uitlezen.
De GND pinnen zijn je feitelijke - (min)


Je moet tussen de uC en de LED nog wel even een weerstandje plaatsen, anders wordt de stroom veel te groot die je uit de microcontroller trekt. (kans op knallen :) )
Zie hier een artikel
 
Ok bedankt ik zal even kijken of het me nu wel lukt.

Nog een vraagje over die poorten:
Als ik dus de knop indruk en er daardoor +5V opzet, wordt de poort PC0 'hoog'. Doordat PC0 'hoog' wordt gaat LED0 aan. Hoe kan ik dit nabootsen op het breadboard net als de stk500?

Ik heb nu de atmega8515L van de stk500 op mijn breadbaord gezet met de code die jij geschreven hebt voor de stk500.
4.8V op de Vcc poort (pin 40)
pin 20 op de GND
pin 21 (PB0) op de + VTG aangesloten en ertussen een knop.
pin 1 een weerstand en daaraan de anode van een LED. Kathode aan de GND

De weerstand: R = (9V - 3V) / 0,02A = 300ohm
= (power supply - LED) / ampere LED

LED blijft uit als ik op de knop druk, maar het voltage verschil tussen pin 20 en 40 wordt .3V meer...ik snap het niet. Moet ik uitlezen wanneer de pin naar de LED 'hoog' wordt? en dan met een N-poort de led verbinden met de VTG?

Ik wou ook uitrekenen hoeveel ohm mijn weerstand moet zijn voor de IC.
r = u / i dus r = (9V - 5V) / i
maar ik zie dus nergens staan op hoeveel ampére de IC werkt? In de datasheet zie ik ook alleen het aantal volt staan. Weet jij het toevallig? of een manier om het uit te rekenen?
 
Laatst bewerkt:
LED blijft uit als ik op de knop druk, maar het voltage verschil tussen pin 20 en 40 wordt .3V meer..

Wat is pin40?

Wat er zou moeten gebeuren:
De knop is uit : Spanningsverschil tussen GND en uitgaande pin = 0 volt (of als ingaande poort geinverteerd: 5 volt)
De knop is uit : Spanningsverschil tussen GND en uitgaande pin = 5 volt (of als ingaande poort geinverteerd: 0 volt)


Ik wou ook uitrekenen hoeveel ohm mijn weerstand moet zijn voor de IC.
r = u / i dus r = (9V - 5V) / i
maar ik zie dus nergens staan op hoeveel ampére de IC werkt? In de datasheet zie ik ook alleen het aantal volt staan. Weet jij het toevallig? of een manier om het uit te rekenen?

Welke weerstand voor de uC? De uC gebruikt stroom, dat houdt in: hij vraagt stroom aan zijn leverancier, je kunt geen stroom ergens in stoppen. (eigenlijk kan dit wel, maar is hier niet van toepassing ;) )
Dus: Voltage/spanning levert de bron aan; Amperage/stroom wordt gevraagd aan de bron.

Hoe meer functionaliteit je gaat gebruiken op de uC hoe meer stroom deze zal gaan gebruiken.

De reden dat er een weerstand tussen je uC en de LED moet, is om de stroom te beperken die gevraagd wordt aan de uC. Teveel stroom leveren is : knal + rook
 
Je uitleg is mij heel erg duidelijk. Er moet stroom komen uit de uitgaande pinnen die ik heb ingesteld als pin 21 hoog uitslaat. Als ik de IC terug doe in mijn stk500 doet hij het, LED'jes gaan aan, geen probleem. Zodra ik hem op mijn breadboard zet doet hij het niet meer. Ik heb net alle pinnen gechecked, en ze geven allemaal tussen de 0,00V en 0,04V aan (behalve Vcc, RESET en GND dan). nooit genoeg om mijn LED te laten branden.

Ik wordt gek dat ik dat LED'je niet aankrijg. Als ik de knop indruk komt er geen voltage verschil. Ik probeer steeds tutorials te zoeken over een IC met (knipperend) LED om te oefenen, maar geen succes.

Want het principe is toch precies hetzelfde? De code die jij voor mij hebt gemaakt verteld dat led1 t/m led7 aan moet gaan en led0 uit, maar alles blijft uit. PB1 t/m PB7 slaan hoog uit. En idee?
 
Laatst bewerkt:
Op dit moment heb ik even geen idee. Ik zal het dan zelf eerst na moeten maken op breadboard. Zodra ik wat weet laat ik je het horen
 
Bedankt Niek, dat zou heel fijn zijn. Ik heb nog wat meer uitgeprobeerd. Ik heb het voltage verhoogd en nu krijg ik het volgende:

Alle LED'jes gaan aan, en als ik de switch indruk gaan ze juist feller branden, maar niet aan of uit. Ik heb weer alle pinnen doorgemeten en op elke pin staat nu rond de 5V gek genoeg....misschien dat je hiervan een idee krijgt. Bedankt
 
: C++ laserquest

Ziet er goed uit!
Ik weet niet of je ervaring hebt met uControllers? Zo niet: dan kan ik je de stk500 starterkit aanraden. Lekker simpel, geschikt voor een redelijke variatie controllers en veel documentatie.
de Controller die hier bijvoorbeeld mooi mee samengaat is de Atmega32. Deze is nog te krijgen in Pdip uitvoering, dus lekker simpel te solderen. Ook zit er een uart ondersteuning in, dus met een extra chipje zoals de max232 heb je je communicatie vrij snel overeind.
Ook zitten er een handvol timers in die je kunt gebruiken voor het "coderen/decoderen" van het licht signaal


Ik gebruik mijn computer (XP en Fedora13) alleen om te schaken en patiencen, maar ik kijk hartstondig uit naar Linux vrij beschikbare spelletjes, bv. SGI stelde daarover, eerst java goed kennen. Er is geen beter spel dan starwars

Vink

ps. geen ervaring met uController
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan