Om te beginnen, Rob, bedankt voor het opsturen van de programmer.
Gisteren avond heb ik hem aangesloten en kunnen lezen zonder probleem. Vanmiddag even wat ledjes aangesloten en dacht 'nu ga ik mijn programma er in programmeren' echter helaas.
Ik krijg het niet voor elkaar te programmeren. Ik blijf vastlopen op een error 21 als ik wil schrijven, kan zoveel lezen als ik wel.
Wie weet hoe ik verder moet gaan?
Led hangt aan poort D... haal de led er af, dan nog doet write het niet.. hij 'wacht' 3 seconde, led isp gaat branden, en dan komt er een fout, -21
Koen Van Vlaenderen
De vergeetachtigheid bewijst grotere diensten aan het hart dan het geheugen aan het verstand.
Ik heb de oplossing (denk ik)
Ik heb wat verder rond gezocht en met moeite 3 forum pagina's van duits vertaald om er achter te komen dat die gast het zelfde probleem had, na mailen heb ik zijn oplossing gekregen :
Er zat een grote bug in PonyProg en is in 2.06c gefixed. Die heb ik gedownload en ik kan schrijven.
Next question... hoe krijg ik me programma nu gestart?
Rob Keij
Honourable Member
Als alles juist is geprogrammeerd zal het programma na het aansluiten van de voedingsspanning direct lopen, tenzij je een startknop voor het te lopen programma hebt geprogrammeerd, maar dan loopt wel al het deel "startknop uitlezen"
Rob
Koen Van Vlaenderen
De vergeetachtigheid bewijst grotere diensten aan het hart dan het geheugen aan het verstand.
reset pin kun je als startknop gebruiken, reset aan massa is 'uit' reset zwevend of aan vcc (via weerstandje) dan is het 'aan'
Gewoon laten lopen als je de voedingsspanning aanlegt is het gebruikelijkste
Heren, bedankt, het werkt, me ledjes gaan nu heerlijk knipperen,zelfs een hele dag door 
Ben nu bezig een input te maken, ik dacht...
5v -> weerstand -> schakelaar -> ingang en dan ingang inlezen (PORTA, pin 0) en als dat 1 is, is de schakkelaar aan, is dat 0 dan is de schakkelaar uit, echter lees ik altijd een 1
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Interne pullup van de AVR inschakelen (zie datasheet). En dan schakel je tussen de pin en de gnd. Geen extra weerstand nodig.
Marcel
char const waardes[] = {0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x40, 0x40};
void wait( )
{ ; }
void main()
{
unsigned int i;
unsigned char j;
PORTD = 0xF0;
DDRD = 0xFF;
PORTA = 0x00;
DDRA = 0x00;
while (1)
{
for (j=0; j< 8; j++)
{
if (PORTA == 1)
PORTD = waardes[j];
else
PORTD = 0xE0;
for (i = 0; i < 10000; i++) wait ();
}
}
}Dit is de code, volgens de datasheet is PORTA pin 1, pin 39. Deze geeft bij mij standaard 5 volt aan als deze aan staat, dus schakkel tussen daar en GND levert volgens mijn programma continu 1 op, want de laatste 3 ledjes branden bij mij altijd.
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Over welke AVR gaat het trouwens? En welke C compiler?
PORTA is het uitgangsregister van poort A.
PINA is het ingangsregister van poort A.
Als je de pinnen van poort A als ingang wilt gebruiken met interne pullup aan doe je het volgende:
DDRA = 0; /* Alle pinnen van poort A als ingang */
PORTA = 255; /* Alle pullups op poort A inschakelen */
value = PINA; /* Inlezen waarde van poort A */
Zoals je ziet heeft PORTA een dubbele functie. Als de poort als uitgang is gedefineert in het Data Direction Register is dit gewoon de waarde die op de poort komt. Als de poort als ingang is gedefineert in het Data Direction Register dan schakel je hiermee de interne pullup weerstanden in.
Het kan overigens per pin, het hoeft niet voor de hele poort.
Dat alles staat in de datasheet.
Marcel
Oke, heb nu dus het inlezen niet meer met PORTB maar met PINB gemaakt, echter maakt niet uit wat ik probeer
ik krijg geen reactie...
Als ik PINB.0 aan GND verbind gebeurt er niets, als ik PINB met niets verbind gebeurt er niets...
Kortom... hoe maak ik een schakelaar/drukknop
want ik snap het niet meer.
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Je probleem is nu erg onduidelijk. Wat heb je precies gedaan (code). En nogmaals welke AVR en welke C compiler?
Marcel
ATmega8515
ICC AVR C compiler
#include < io8515v.h >
#include < macros.h >
char const waardes[] = {0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x40, 0x40};
void wait( )
{ ; }
void main()
{
unsigned int i;
unsigned char j;
PORTD = 0xF0;
DDRD = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
while (1)
{
for (j=0; j< 8; j++)
{
if (PINB == 1)
PORTD =0xE0;
else
PORTD = waardes[j];
for (i = 0; i < 10000; i++) wait ();
}
}
}Laat ik de vraag veranderend, hoe sluit ik nu een schakelaar aan zodat ik PINB aan en uit kan zetten...
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Ok even een klein voorbeeldje.
void main()
{
DDRA = 0; /* alle bits van poort A als ingang
PORTA = 255; /* poort A pull-up weerstanden aan */
DDRB = 255; /* alle bits van poort B als uitgang */
PORTB = 0; /* alle bits uit */
while(1) /* oneindige loop */
{
PORTB = PINA;
}
}
Wat doet bovenstaande code:
PORTB neemt de status van PORTA exact over.
Als je op nu pin 0 van poort A laag maakt, moet pin 0 van poort B ook laag worden.
Als je dit werkende krijgt, dan kan je een stap verder gaan.
Marcel
Ik snap de kant van het programmeren, ik heb de laatste 2 jaar diverse applicaties voor siemens microcontrollers geschreven (moet alleen even wat meer op de verschillen gaan letten met de AVR) mijn grootste vraag is, hoe maak ik in de schakeling dan die schakelaar?
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Op 19 januari 2004 19:21:10 schreef Parcye:
Ik snap de kant van het programmeren, ik heb de laatste 2 jaar diverse applicaties voor siemens microcontrollers geschreven (moet alleen even wat meer op de verschillen gaan letten met de AVR) mijn grootste vraag is, hoe maak ik in de schakeling dan die schakelaar?
Zoals ik al eerder zie. Interne pull-up van de AVR inschakelen (zie datasheet). En dan schakel je tussen de pin en de gnd.
Als je dat nou eens test met bovenstaande code (daarin worden de interne pull-up weerstanden ook ingeschakeld).
Marcel
Ik heb het geprobeerd maar maakt dus niet uit of ik het nu wel of niet aan de ground aansluit maaakt het niets uit.
Rob Keij
Honourable Member
En dan niet vergeten de haakjes er om
dat was mijn hele fout, pff is even wennen, al denk je ik ken het nog valt het toch snel weer even tegen