Richtigen Pin bei STM8S ein- bzw. ausschalten

OP #4203483
Lesenswert?
• ▲
▼
Hallo,

ich versuche, ein externes LCD-Display blinken zu lassen, in dem ich 
einen bestimmten Port auf High oder Low setze. Dabei will es mir nicht 
gelingen, den richtigen Port zu erwischen.

Mein Programm:
1
#include <iostm8s003f3.h>
2

3
void delay(unsigned int n)
4
{
5
    while (n-- > 0);
6
}
7

8
int main( void )
9
{
10
  unsigned int cycle = 50000;
11
  PD_DDR = 0x20;
12
  PD_CR1 = 0x20;
13
  do{
14
    PD_ODR^=0x20;
15
    delay(cycle);
16
  }while(1);
17
}

Am Ausgang PD5 funktioniert es dann. Aber wie kann ich den Ausgang PD3 
ansprechen?

Nach dem Datenblatt des SO20 pinouts hat PD3 die Nummer 20. Hat das 
damit irgendwas zu tun?
Persönliche Seite #4203533
Lesenswert?
• ▲
▼
Max M. schrieb:
> Torsten C. schrieb:
>> Dort wäre auch der Link auf die richtige IDE gewesen (anderer Thread).
>
> Warum ist die STM-IDE richtiger als die IAR-IDE?
>
> Dennis H. schrieb:
>> Reiner Zufall oder Copy & Paste ?
>
> Copy Paste.
>
> Dennis H. schrieb:
>> Ab Seite 106.
>
> Danke.

Ich geb dir mal noch 2 Tipps mit auf den Weg.

0x20
kann man auch schreiben als
(1<<5) //entspricht Px5
0x08 kann man auch schreiben als
(1<<3) //entspricht Px3
und ist angenehmer und verständlicher lesbar

Wenn du die Werte von DDR etc. nach dem Init weiter beeinflußen willst 
schreibe nicht direkt deine Pinkonfiguration hinein, da bei dieser 
Methode die alten Werte verloren gehen.

setzen mit DDR |= (1<<5)
löschen mit DDR &= ~(1<<5)

manch intelligenter Compiler wandelt das dann zu Bitbefehlen des 
Controllers um, falls vorhanden.
OP #4203541
Lesenswert?
• ▲
▼
Torsten C. schrieb:
> Welche STM-IDE?

http://www.st.com/web/catalog/tools/FM147/CL1794/SC1807/SS1747/PF210567

Dennis H. schrieb:
> Ich geb dir mal noch 2 Tipps mit auf den Weg.

Danke, dass hat mein Problem gelöst :)

Edit:

Warum funktioniert das hier eigentlich nicht?
1
int main( void )
2
{
3
  unsigned int cycle = 50000;
4
  PD_DDR |= (1<<3);
5
  PD_CR1 |= (1<<3);
6
  do{
7
    PD_ODR |= (1<<3);
8
    delay(cycle);
9
    PD_ODR = 0x00;
10
  }while(1);
11
}

Beim Debuggen bekommt PD_ODR beim 2. Durchlauf den Wert 0x00, genau das 
gleiche weise ich ja mit
1
PD_ODR = 0x00
 auch zu?
Persönliche Seite #4203631
Lesenswert?
• ▲
▼
Max M. schrieb:
> Torsten C. schrieb:
>> Welche STM-IDE?
>
> http://www.st.com/web/catalog/tools/FM147/CL1794/SC1807/SS1747/PF210567
>
> Dennis H. schrieb:
>> Ich geb dir mal noch 2 Tipps mit auf den Weg.
>
> Danke, dass hat mein Problem gelöst :)
>
> Edit:
>
> Warum funktioniert das hier eigentlich nicht?
>
>
1
> int main( void )
2
> {
3
>   unsigned int cycle = 50000;
4
>   PD_DDR |= (1<<3);
5
>   PD_CR1 |= (1<<3);
6
>   do{
7
>     PD_ODR |= (1<<3);
8
>     delay(cycle);
9
>     PD_ODR = 0x00;
10
>   }while(1);
11
> }
12
>
>
> Beim Debuggen bekommt PD_ODR beim 2. Durchlauf den Wert 0x00, genau das
> gleiche weise ich ja mit
1
PD_ODR = 0x00
 auch zu?

Dein PD_ODR ^= (1<<3) kannste ruhig beibehalten, es dient ja nur zum 
Toggeln dieses einen Bits und läßt die anderen unverändert.

Eventuell reicht auch dieses :
leuchtet dir sicher ein

do{
     PD_ODR |= (1<<3);
     delay(cycle);
     PD_ODR &= ~(1<<3);
     delay(cycle);
}while(1);

Die Schleife würde ohne das zweite delay ja sofort wieder das Bit auf 1 
setzen im ODR.

Einfacher geht es mit
do{
     PD_ODR ^= (1<<3);
     delay(cycle);
}

Eventuell solltest du dich mal mit Logikfunktionen und deren Wirkung 
auseinandersetzen.

http://m.eet.com/media/1061594/max-bb-02.gif

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.