Toon posts:

HD44780 aan PIC16f628A: waarom werkt het niet?

Pagina: 1
Acties:

  • nika8991
  • Registratie: april 2006
  • Laatst online: 27-12-2014
Ik probeer met de PIC16f628A een 4*20 characters LCD aan te sturen.
Ik gebruik MPLAB met Hi-Tech C-compiler en wil de laagste 4 bits van PORTA als output definiëren voor data en 2 bits van PORTB voor controle. Lijkt in eerste instantie vrij eenvoudig, toch lukt het me niet. Om het te controleren hebt ik de LCD vervangen door ledjes en blijkt dat RA3 (de hoogste van de 4 data bits) niet reageert, ik heb het vermoeden dat die in 3-state staat of als ingang.
Ik heb geen idee wat dat aan kan liggen, ik vermoed dat er ergens nog een setting mis is maar welke???

Hier het test programma om de leds aan te sturen, lijkt heel triviaal.
C: test-led
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <htc.h>

//__CONFIG(XT & WDTDIS & PWRTDIS & BORDIS & UNPROTECT & LVPDIS);
__CONFIG(0x3D29);
void init(void) {
   CMCON = 0x07; // Disable analog comparator
   TRISA = 0x00; // All bits as output

}
// Delay loop
void delay(int d) {
   for (int i=0; i < d; i++) {
      _delay(100000);
   }
}

void main(void)
   {
   init();
   while (1){
      PORTA = 0x0F; //RA0..RA2 worden '1' maar RA3 blijft '0'
      delay(5);
      PORTA = 0x00;
      delay(5);
   }
}

nika8991


  • DaWaN
  • Registratie: oktober 2002
  • Laatst online: 21:19

DaWaN

'r you wicked ??

Heb je al eens gekeken wat je TRIS en PORT registers doen als je de MPLAB simulator gebruikt ?

If you do not change direction, you may end up where you are heading


  • Sprite_tm
  • Registratie: september 2002
  • Laatst online: 02:47

Sprite_tm

Semi-Chinees

Ik heb je topic even een titlechange gegeven zodat de titel de lading wat beter dekt. De processor die je hier specifiek gebruikt is een van de minst belangrijke dingen hier namelijk :)

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • Aotearoa
  • Registratie: mei 2005
  • Laatst online: 21:43
Het programma zou moeten werken.
Enige dat ik kan bedenken; Je hoeft bij de includes bovenaan niet je type processor te definiëren?

  • Anthor
  • Registratie: juni 2002
  • Niet online
Even uit interesse, kan jouw hd44780 met 4 datalijnen aangestuurd worden?

Mijn 4*20 hd44780 display kan dat namelijk niet. Ik heb het nooit getest maar in de 'function set' instructie bij de reset procedure staat er in de datasheet standaard een 1 op de DL bit (en de optie 4-bit wordt nergens vermeld).
(ik ging er vanuit dat dit voor alle 4*20 displays geldt)

  • cynical
  • Registratie: maart 2002
  • Laatst online: 30-06-2011
Kijk in de datasheet eens naar het type pin dat je gebruikt. Een aantal pinnen op poort a is open collector en kunnen dus geen harde '1' uitsturen. Een pull-up weerstand doet dan wonderen.

I don't suffer from insanity, I enjoy every minute of it!


  • DaWaN
  • Registratie: oktober 2002
  • Laatst online: 21:19

DaWaN

'r you wicked ??

cynical schreef op maandag 14 september 2009 @ 11:24:
Kijk in de datasheet eens naar het type pin dat je gebruikt. Een aantal pinnen op poort a is open collector en kunnen dus geen harde '1' uitsturen. Een pull-up weerstand doet dan wonderen.
Dat geldt dus niet voor poort RA3, RA4 heeft inderdaad wel een pull up nodig

If you do not change direction, you may end up where you are heading


  • nika8991
  • Registratie: april 2006
  • Laatst online: 27-12-2014
@cynical: volgens de datasheet is het geen open collector uitgang. Tegen dat probleem was ik al aangelopen met RA4.

@Anthor: ja, volgens de beschrijving zou het met 4 datalijnen mogelijk moeten zijn, je stuurt dan een data byte als 2 nibbles naar de display (iets minder snel, maar voor mijn toepassing is dat geen probleem). Maar helaas heb ik het nog niet kunnen testen wegens bovenstaand probleem.

@Sprite_tm: je hebt gelijk wat duidelijkheid betreft, ik was iets te snel met het posten. Maar het type processor is wel degelijk van belang omdat ze nogal verschillen qua interne setting mogelijkheden.

nika8991


  • Com-kommer
  • Registratie: januari 2001
  • Laatst online: 31-10-2012
Volgens de datasheet zitten TRISA en PORTA register niet in dezelfde memorybank en zal je dus moeten wisselen.
Om de poortrichting in te stellen moet je volgens de datasheet:

code:
1
2
3
4
5
6
7
8
9
CLRF PORTA            ;Initialize PORTA by setting output data latches
MOVLW 0x07            ;Turn comparators off and
MOVWF CMCON           ;enable pins for I/O functions

BCF STATUS, RP1
BSF STATUS, RP0       ;Select Bank1

MOVLW 0x1F            ;Value used to initialize data direction
MOVWF TRISA           ;Set RA<4:0> as inputs, TRISA<5> always read as '1'. TRISA<7:6> depend on oscillator mode


Daarna moet je terug naar memorybank 0 om je poorten aan te kunnen sturen.

There once was a woman named Bright, who travelled much faster than light. She set out one day, in a relative way, and arrived on the previous night.


  • JER00N
  • Registratie: maart 2002
  • Niet online
Com-kommer: dat geldt alleen voor assembly, als je gewoon in C programmeert regelt de compiler al dat banken gedoe.

Ik vind het ook een beetje merkwaardig. Ik heb zelf ook vaak genoeg gezeik gehad met IO's die niet werkten, maar als ik eenmaal de juiste peripherals (in dit geval die comparator, CMCON) had uitgezet, werkte het toch wel...

[Voor 49% gewijzigd door JER00N op 14-09-2009 15:34]


  • Com-kommer
  • Registratie: januari 2001
  • Laatst online: 31-10-2012
JER00N schreef op maandag 14 september 2009 @ 15:26:
Com-kommer: dat geldt alleen voor assembly, als je gewoon in C programmeert regelt de compiler al dat banken gedoe.
Ah ok. Wist ik niet, Heb alleen ervaring met assembly idd. Wel chill dat dat niet hoeft, het houdt de boel een stuk overzichtelijker.

Dan is het voor mij ook een raadsel waarom het niet zou werken. Ik zou eens kijken wat de logic analyzer van MPLAB zegt.

[Voor 4% gewijzigd door Com-kommer op 14-09-2009 15:52]

There once was a woman named Bright, who travelled much faster than light. She set out one day, in a relative way, and arrived on the previous night.


  • FlyEragon
  • Registratie: oktober 2003
  • Laatst online: 22-11 00:30

FlyEragon

Alien Monkeys

Heb je het volgende al geprobeerd ?

VRCON = 0x00; // uitschakelen van Voltage Reference

  • nika8991
  • Registratie: april 2006
  • Laatst online: 27-12-2014
@Com-kommer: ik heb hetzelfde geprobeerd in assembler, rekening houdend met de banken, en daar had ik hetzelfde probleem, RA3 reageert niet goed terwijl RA0..RA2 wel goed functioneren. Ook nog met een andere PIC16f628 geprobeerd met hetzelfde resultaat, ik neem dus aan dat het geen hardware fout is.

@FlyEragon: heb ik nog niet geprobeerd, ga dat vanavond doen. Bedankt voor de tip.

nika8991

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee