Hallo,

Hoe kan ik met een avr pulsen opwekken.
Bijvoorbeeld ik wil een timer maken die van 10 naar 0 telt.
Hoe zorg ik er dan voor dat die om de seconde verschuift ? (dus -1 seconde).

Hoe precies moet het? En moet de uc tussendoor nog wat anders doen?


for(x=10;x>0;x--){
 delay 1s
}

Basis c...

Ja misschien is het handig als ik wat meer info geef.

Het moet dus in basecom, en dan wil ik dat er elke seconden iets gebeurt.
Oke wat ik nu heb is dit :

waitms 1000

Dus wacht 1000 miliseconden.
Maar welke clock moet ik gebruiken zodat het werkelijk een seconde is ?

[Bericht gewijzigd door AVR_N()()B op (36%)]

Als je ongeveer een seconde wilt, ga dan voor de interne oscillator.
Als je een behoorlijk precieze seconde wilt, ga dan voor een extern kristal.

Voor 90% van de toepassingen voldoet de interne oscillator wel.

Moet ik het kristal gewoon instellen op 1Mhz ?

Je kan natuurlijk altijd ijken hoeveel echte secondes er voorbij zijn gegaan.

Laat een led voor 1 minuut branden, en houd de tijd bij.

Stel dat het 50 echte seconden blijkt te zijn dan kan je ongeveer uitrekenen welke waarde je voor 1 seconde moet invullen.

60/50 = 1,2 seconden

Oke met dat pulsen lukt nu. :)
Maar nu wil ik graag een LCD aansluiten op mij avr.
Hoe moet ik dit doen ?
Het gaat om een attiny2313.

Voor de pulsen:


$regfile = "attiny2313.dat"
$crystal = 16000000 'pas aan naar de frequentie die jij gebruikt
'Pas wel onderstaande berekeningen aan dan!
config timer1 = timer, prescale = 256
'Timer1 is een 16 bits timer, telt dus tot 65535
'16000000/256=62500 ->62500 pulsen per seconde
'Beginwaarde timer1 = 65536-62500=3036
'Dus timer1 elke keer laden met 3036
On timer1 Aflopen_timer1
Enable interrupts
Enable timer1
Timer1 = 3036

config portd.1 = output 'even een willekeurige pen kiezen om de frequentie op te zetten

Do
'Zet hier je programma neer
Loop

Aflopen_timer1:
timer1 = 3036
toggle portd.1
return

Zo'n timer is VEEL precieser dan de wait instructies. Een wait instructie kan onderbroken worden door b.v. interrupts... Een timer blijft gewoon doortellen, wat het programma ook doet. Een klok opgebouwd met wait instructies kan na een dag meer dan een minuut afwijken. Eentje met bovenstaande code wijkt bij mij slechts enkele seconden af...

En voor je LCD:
Ik neem aan dat je een gewoon 16*2 LCD gebruikt...?
Je moet RS, E, DB4, DB5, DB6 en DB7 aansluiten op willekeurige IO pinnen van de AVR. R/W moet aan de massa, VCC aan de plus, VSS aan de massa en VEE aan een potmeter voor het contrast.
In je code zet je dan:


Config Lcd = 16*2
config lcdpin = pin, db4 = dejuistepin, db5 = dejuistepin, db6 = dejuistepin, db7 = dejuistepin, E = dejuistepin, Rs = dejuistepin
'dejuistepin moet je wel vervangen door de juiste pin he...

Cls
lcd "Dit is een test"
end

:)

Kan ik je laatste stuk code ook vervangen in de bascom instellingen ?
Dus Options -> Compiler -> LCD.
En dan krijg ik een scherm waarvan sommige dingen vrij vanzelfsprekend zijn.
Maar ook een paar dingen die ik niet weet :
-Bus-mode, lijkt mij 8 bit maar dit weet ik niet zeker.
-Data-mode, lijkt mij pin maar ook dit weet ik niet zeker.
-LCD en RS adress, lijkt mij dat ik dit gewoon standaard moet laten.

Dus kan iemand mij hier nog wat info over geven ?
En welke componenten heb ik allemaal nodig.
Ik heb het volgende :

2 potmeters van 10k, 1 voor het contras van het lcd en 1 voor het backlight van het lcd.
Een ontkoppel condensator van 470nF.
En natuurlijk het lcd zelf :+

- 4 of 8 bits mode kan allebei naar keuze...
- CS en RS lijnen in overeenstemming met de gebruikte pinnen...
- Backlight regelen met potmeter gaat alleen met een draadgewonden vanwege het stroomgebruik.(PWM is ook een mogelijkheid)

Ik snap niet wat je bedoelt met :

- CS en RS lijnen in overeenstemming met de gebruikte pinnen...

Wat is de CS lijn dan ?

CS = chip select lijn
RS = register select lijn
Beide besturingslijnen van de LCD module.

- - big bang - -

Alleen over de RS lijn kan ik iets vinden maar niks van de CS lijn.
Ik ga er dan maar vanuit dat deze niet belangrijk is.
Ik denk dat ik dinsdag wel mijn het lcd schermpje binnen heb.

Ik neem aan dat ie met chip select de E lijn bedoelt...

Oh, oke dan is het goed.
Ik kijk wel of ik tegen problemen aanloop.

Oke even een hele domme vraag maar ik ben ff vergeten hoe ik ook al weer die potmeter aan moet sluiten :+
De loper moet op de contras pin van het lcd toch.
En dan op de linkse poot de + en de rechter + toch ? :p

Voor de rest lees ik veel over intaliseren heb ik hier nog iets mee te maken of doet de avr dit zelf.
En heeft iemand misschien een basecom code voor het aansturern voor het lcd, dus gewoon een beetje de opbouw en de structuur enzo.

En maakt het uit op welke pin van avr ik de data lijnen van het lcd aansluit, want dit kun je ook instellen in bascom toch ?

Zit een zeer uitgebreide help file bij Bascom. Ook zijn er genoeg voorbeelden in de sample directory.
Daar kun je alles vinden wat je nodig hebt.
http://avrhelp.mcselec.com/config_lcd.htm

Wat voor nut heeft het om de linker en recht op de + aan te sluiten?

Gewoon potmeter tussen de + en - en contrast op de loper.

@Bas Smit: Inderdaad niet op gelet het moet dus + en - zijn ik verbeter het zo wel even.
Maar iniedergeval bedankt want hier kan ik iets mee !!!

@2N3055: Dankjewel inderdaad veel info daar.